--------- android培训、java培训、期待与您交流! ----------
装饰设计模式:动态地给一个对象添加一些额外的功能,装饰模式比生成子类更加灵活。
Java中的I/O包就是用装饰设计模式思想设计的。
当你想要为某个类的对象进行功能增强时,可以定义一个装饰类,将要被装饰的对象传入,基于被装饰的对象的已有功能,提供更多的功能。
装饰设计模式的优点:
<1>装饰类和被装饰类可以独立发展,而不会相互耦合。
<2>装饰模式是继承关系的一个替代方案。如果用继承方式设计类,这个继承体系扩展性不好;继承层次多了的话,整个体系会显得非常臃肿,非常复杂。而装饰模式不管装饰多少层,返回的对象还是最核心的接口或抽象类。即装饰类与被装饰类存在于一个体系中。
<3>装饰模式可以动态的扩展一个实现类的功能。装饰模式是继承的有力补充。继承可以静态地给类增加功能。
装饰设计模式的使用场景:
<1>需要扩展一个类的功能,或给一个类增加附加功能。
<2>需要动态的给一个对象增加功能,这些功能可以再动态地撤消。
<3>需要为一批兄弟类进行改装或加装功能。
装饰模式的通用设计:
//抽象构件
public abstract class Component
{
public abstract void operate();
}
//具体构件
public class ConcreteComponent extends Component
{
public void operate()
{
System.out.println("do Something");
}
}
//抽象装饰者
public abstract class Decorator extends Component
{
private Component component = null;
public Decorator(Component component)
{
this.component = component;
}
public void operate()
{
this.component.operate();
}
}
//具体的装饰类
public class ConcreteDecorator1 extends Decorator
{
public ConcreteDecorator1(Component component)
{
super(component);
}
public void method1()
{
System.out.println("method1 装饰");
}
public void operate()
{
this.method1();
super.operate();
}
}
public class ConcreteDecorator2 extends Decorator
{
public ConcreteDecorator2(Component component)
{
super(component);
}
public void method2()
{
System.out.println("method2 装饰");
}
public void operate()
{
this.method2();
super.operate();
}
}
//场景类
public class Client
{
public static void main(String[] args)
{
Component component = new ConcreteComponent();
//第一层装饰
component = new ConcreteDecorator1(component);
//第二层装饰
component = new ConcreteDecorator2(component);
component.operate();
}
}