(6)穿什么有这么重要?——装饰模式

装饰模式

动态地给一个对象添加一些额外地职责,就增加功能来说,装饰模式比生成子类更为灵活(摘抄)

装饰模式在添加功能方面确实非常灵活,当你需要给已经生成地类添加一个新的方法的时候,用装饰模式真的是太方便了,你只需要知道自己需要给哪一个对象添加哪一个方法就ok了

装饰模式一般用在增加原有类的核心职责或主要行为,在主类中加入了新的字段,新的方法和新的逻辑,从而增加了主类的复杂度。

public interface SuperC
{
	void Operation();
}

public class Concrete implements SuperC
{

	@Override
	public void Operation() {
		//被修饰的类的基本操作
	}
	
}

public class Decorator implements SuperC
{
	SuperC super1;
	
	public void setSuper (Super super1)
	{
		this.super1 = super1;
	}
	
	@Override
	public void Operation()
	{
		if (super1 != null)
		{
			super1.Operation();
		}
	}
}

public class DecoratorA extends Decorator
{
	@Override
	public void Operation()
	{
		super.Operation();
		// 自己的操作
	}
}

public class DecoratorB extends Decorator
{
	@Override
	public void Operation()
	{
		super.Operation();
		// 自己的操作
	}
	
	public void SpecialB()
	{
		
	}
}

public class DecoratorC extends Decorator
{
	@Override
	public void Operation()
	{
		super.Operation();
		// 自己的操作
	}
	
	public void SpecialC()
	{
		
	}
}

调用代码:

public static void main (String args[])
{
	Concrete concrete = new Concrete();
	DecoratorA a = new DecoratorA();
	DecoratorB b = new DecoratorB();
	DecoratorC c = new DecoratorC();
	
	a.setSuper(concrete);
	//体现装饰模式优势的地方来了
	b.setSuper(a);
	c.setSuper(a);
}

有没有看出来有什么好处呢?

给类动态添加所需方法的优势一下就体现了,当有需要两个两个对象分别有ab和ac两种方法,这样就可以很方便,而且当你需要添加更多的方法的时候,写一个Decorator的子类,然后添加你需要装饰的对象就可以了,继承于Decorator类的功能类都是起到为Concrete类添加功能的作用

这样做最大的好处就是有效的把类的核心职责和装饰功能区分开了。而且可以去除相关类中重复的装饰逻辑(摘抄)

文章导航