装饰模式
UML
![装饰模式](https://i-blog.csdnimg.cn/blog_migrate/1be5c673f5633f48f367d71ea8970e3b.png)
解释说明
- 动态地给一个对象添加一些额外的职责。
- 在增加功能的方面上,装饰模式比生成子类更为灵活。
- 有效地把类的核心职责和装饰功能区分开。去除相关类中重复的装饰逻辑。
代码实现
package learn03;
public abstract class Component {
public abstract void Operation();
}
package learn03;
public class ConcreteComponent extends Component {
@Override
public void Operation() {
System.out.println("我是被装饰的对象!");
}
}
package learn03;
public class Decorator extends Component {
protected Component component;
public void setComponent(Component component) {
this.component = component;
}
@Override
public void Operation() {
if (null != component) {
component.Operation();
}
}
}
package learn03;
public class ConcreteDecoratorA extends Decorator {
private String addedState;
@Override
public void Operation() {
super.Operation();
addedState = "装饰的新属性A!";
System.out.println("添加:" + addedState);
}
}
package learn03;
public class ConcreteDecoratorB extends Decorator {
@Override
public void Operation() {
super.Operation();
AddedBehavior();
}
private void AddedBehavior() {
System.out.println("执行:装饰的新功能B!");
}
}
import learn03.*;
public class Main {
public static void main(String[] args) {
ConcreteComponent concreteComponent = new ConcreteComponent();
ConcreteDecoratorA concreteDecoratorA = new ConcreteDecoratorA();
ConcreteDecoratorB concreteDecoratorB = new ConcreteDecoratorB();
concreteDecoratorA.setComponent(concreteComponent);
concreteDecoratorB.setComponent(concreteDecoratorA);
concreteDecoratorB.Operation();
}
}
参考资料