码上敲享录 > java面试题及答案大全 > 举一个用 Java 实现的装饰模式(decorator design pattern)?它是作用于对象层次还是类层次?

举一个用 Java 实现的装饰模式(decorator design pattern)?它是作用于对象层次还是类层次?

上一章章节目录下一章 2023-07-11已有222人阅读 评论(0)

下面是一个使用Java实现的装饰模式的示例:


```java

// 定义抽象组件

interface Component {

   void operation();

}


// 具体组件

class ConcreteComponent implements Component {

   @Override

   public void operation() {

       System.out.println("执行具体组件的操作");

   }

}


// 抽象装饰器

abstract class Decorator implements Component {

   protected Component component;


   public Decorator(Component component) {

       this.component = component;

   }


   @Override

   public void operation() {

       component.operation();

   }

}


// 具体装饰器

class ConcreteDecoratorA extends Decorator {

   public ConcreteDecoratorA(Component component) {

       super(component);

   }


   @Override

   public void operation() {

       super.operation();

       System.out.println("执行具体装饰器A的操作");

   }

}


class ConcreteDecoratorB extends Decorator {

   public ConcreteDecoratorB(Component component) {

       super(component);

   }


   @Override

   public void operation() {

       super.operation();

       System.out.println("执行具体装饰器B的操作");

   }

}


// 客户端代码

public class Main {

   public static void main(String[] args) {

       Component component = new ConcreteComponent();  // 创建具体组件

       component.operation();  // 执行具体组件的操作


       Component decoratedComponent = new ConcreteDecoratorA(new ConcreteDecoratorB(new ConcreteComponent()));  // 创建装饰后的对象

       decoratedComponent.operation();  // 执行装饰后对象的操作

   }

}

```


这个示例中,抽象组件(`Component`)定义了组件的操作。具体组件(`ConcreteComponent`)是被装饰的对象。抽象装饰器(`Decorator`)实现了抽象组件接口,并维护一个指向具体组件的引用。具体装饰器(`ConcreteDecoratorA`和`ConcreteDecoratorB`)继承自抽象装饰器,对组件进行装饰并添加额外的功能。


装饰模式是作用于对象层次的设计模式。它允许在运行时动态地向对象添加功能,而无需修改现有的类结构。通过逐层嵌套装饰器,可以给对象添加多个不同的装饰组件,实现更灵活的功能组合。装饰模式支持开放-封闭原则,因为它允许在不修改现有代码的情况下添加新功能。


0

有建议,请留言!

  • *您的姓名:

  • *所在城市:

  • *您的联系电话:

    *您的QQ:

  • 咨询问题:

  • 提 交