装饰模式(Decorator Pattern)是一种比较常见的模式,其定义如下:
Attach additional responsibilities to an object dynamically keeping the same interface.Decorators provide a flexible alternative to subclassing for extending functionality.(动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。)
定义接口或者抽象类
public interface Component {
void operate();
}
抽象类实现上述接口
public abstract class Decorator implements Component {
private Component component;
// 通过构造函数传递被修饰者
public Decorator(Component component) {
this.component = component;
}
@Override
public void operate() {
this.component.operate();
}
}
实现类
public class ConcreteComponent implements Component {
@Override
public void operate() {
System.out.println("do something");
}
}
具体实现类
public class ConcreteDecorator1 extends Decorator {
public ConcreteDecorator1(Component component) {
super(component);
}
public void method1() {
System.out.println("method1修饰");
}
// 重写父类operate方法
@Override
public void operate() {
this.method1();
super.operate();
}
}
public class ConcreteDecorator2 extends Decorator {
public ConcreteDecorator2(Component component) {
super(component);
}
private void method2() {
System.out.println("method2修饰");
}
@Override
public void operate() {
this.method2();
super.operate();
}
}
测试方法
@Test
public void test() {
Component component = new ConcreteComponent();
// 第一次修饰
component = new ConcreteDecorator1(component);
// 第二次修饰
component = new ConcreteDecorator2(component);
// 修饰后运行
component.operate();
}
运行结果如下:
method2修饰
method1修饰
do something
https://gitee.com/youxiaxiaomage/java-practices/tree/master/yxxmg-gof-sample/src/main/java/com/yxxmg/gof/structure/decorator