装饰者模式:
动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。
如下图所示为装饰者模式的类图:
如图所示,装饰者模式最关键的一点是装饰者与被装饰者必须继承同一个抽象的父类,装饰者再引用被装饰者。这样的设计方式起到扩展的功能。当需要扩展功能时不需要修改被装饰者的代码,只需要在装饰者扩展其功能。这是比较符合开闭原则的。(对扩展开放,对修改关闭)
代码实现:
装饰者与被装饰者都要实现的父类Component
public abstract class Component {
public abstract void methodA();
}
具体实现的装饰者ConcreteComponent
public class ConcreteComponent extends Component{
@Override
public void methodA() {
System.out.println("被装饰者");
}
}
抽象的装饰者类Decorator
package org.mine.patterns.wrapper.learn;
/**
* @ClassName Decorator
* @Description
* @Author Administrator
* @Date 2021/4/15 0015 22:48
* @Version 1.0
*/
public abstract class Decorator extends Component{
@Override
public void methodA() {
}
//装饰者其他方法
public final void methodB() {
template();
}
public abstract void template();
}
具体实现的装饰者类ConcretrDecoratorA
package org.mine.patterns.wrapper.learn;
/**
* @ClassName ConcreteDecoratorA
* @Description
* @Author Administrator
* @Date 2021/4/15 0015 22:53
* @Version 1.0
*/
public class ConcreteDecoratorA extends Decorator{
private Component component;
public ConcreteDecoratorA(Component component) {
this.component = component;
}
@Override
public void methodA() {
component.methodA();
System.out.println("装饰者装饰");
}
@Override
public void template() {
System.out.println("子类实现");
}
}
具体的代码地址:
https://github.com/ryanzhuyuzhao/patterns.git