1. 定义

在不改变原有对象的基础上,将功能附加到对象上

2. 实现

基础:拍照功能

  1. interface Component {
  2. void operation();
  3. }
  4. //拍照
  5. class ConcreteComponent implements Component {
  6. @Override
  7. public void operation() {
  8. System.out.println("拍照.");
  9. }
  10. }

定义装饰器

  1. abstract class Decorator implements Component {
  2. Component component;
  3. public Decorator(Component component) {
  4. this.component = component;
  5. }
  6. }

扩展美颜功能

  1. //扩展美颜
  2. class ConcreteDecorator1 extends Decorator {
  3. public ConcreteDecorator1(Component component) {
  4. super(component);
  5. }
  6. @Override
  7. public void operation() {
  8. System.out.println("添加美颜.");
  9. component.operation();
  10. }
  11. }

扩展滤镜功能

  1. //扩展滤镜
  2. class ConcreteDecorator2 extends Decorator {
  3. public ConcreteDecorator2(Component component) {
  4. super(component);
  5. }
  6. @Override
  7. public void operation() {
  8. System.out.println("添加滤镜.");
  9. component.operation();
  10. }
  11. }

使用

  1. public static void main(String[] args) {
  2. //拍照
  3. Component component = new ConcreteComponent();
  4. component.operation();
  5. //扩展美颜
  6. Component component1=new ConcreteDecorator1(component);
  7. component1.operation();
  8. //扩展滤镜
  9. Component component2=new ConcreteDecorator2(component1);
  10. component2.operation();
  11. }