文章目录
装饰模式
动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。
本质:动态组合(动态是手段,组合是目的)
缺点:产生很多细粒度现象
package 装饰模式;
public abstract class Component {
public abstract void Operation();
}
package 装饰模式;
public class ConcretComponent extends Component {
@Override
public void Operation() {
System.out.println("具体对某个对象的操作");
}
}
package 装饰模式;
public abstract class Decorator extends Component {
private Component component;
public Component getComponent() {
return component;
}
public void setComponent(Component component) {
this.component = component;
}
@Override
public void Operation() {
if (component != null) {
component.Operation();
}
}
}
package 装饰模式;
public class ConcreteDecoratorA extends Decorator {
public void Operation() {
super.Operation();
System.out.println("具体装饰A的操作");
}
}
package 装饰模式;
public class ConcreteDecoratorB extends Decorator {
public void Operation() {
super.Operation();
System.out.println("具体装饰B的操作");
}
}
package 装饰模式;
public class Client {
public static void main(String[] args) {
ConcretComponent c = new ConcretComponent();
ConcreteDecoratorA d1 = new ConcreteDecoratorA();
ConcreteDecoratorB d2 = new ConcreteDecoratorB();
d1.setComponent(c);
d2.setComponent(d1);
d2.Operation();
}
}