• 装饰者模式


    装饰者模式是一种结构型设计模式,它允许你通过将对象放入包含行为的特殊封装对象中来动态改变对象的行为。

    装饰者模式在 Java 中的应用非常广泛,例如在 Java I/O 类库中就大量使用了装饰者模式。

    下面是一个简单的装饰者模式的 Java 实现:

    1. // 定义组件接口
    2. public interface Component {
    3. void operation();
    4. }
    5. // 定义具体组件
    6. public class ConcreteComponent implements Component {
    7. @Override
    8. public void operation() {
    9. System.out.println("ConcreteComponent operation");
    10. }
    11. }
    12. // 定义装饰者基类
    13. public abstract class Decorator implements Component {
    14. protected Component component;
    15. public Decorator(Component component) {
    16. this.component = component;
    17. }
    18. @Override
    19. public void operation() {
    20. component.operation();
    21. }
    22. }
    23. // 定义具体装饰者
    24. public class ConcreteDecoratorA extends Decorator {
    25. public ConcreteDecoratorA(Component component) {
    26. super(component);
    27. }
    28. @Override
    29. public void operation() {
    30. super.operation();
    31. addedBehavior();
    32. }
    33. public void addedBehavior() {
    34. System.out.println("ConcreteDecoratorA added behavior");
    35. }
    36. }
    37. public class ConcreteDecoratorB extends Decorator {
    38. public ConcreteDecoratorB(Component component) {
    39. super(component);
    40. }
    41. @Override
    42. public void operation() {
    43. super.operation();
    44. addedBehavior();
    45. }
    46. public void addedBehavior() {
    47. System.out.println("ConcreteDecoratorB added behavior");
    48. }
    49. }

    在这个例子中,ConcreteComponent 是我们的具体组件,ConcreteDecoratorAConcreteDecoratorB 是具体的装饰者,它们在不改变 ConcreteComponent 基础功能的前提下,增加了新的行为。

    使用时,我们可以这样:

    1. Component component = new ConcreteComponent();
    2. component = new ConcreteDecoratorA(component);
    3. component = new ConcreteDecoratorB(component);
    4. component.operation();

    输出结果:

    1. ConcreteComponent operation
    2. ConcreteDecoratorA added behavior
    3. ConcreteDecoratorB added behavior

    这样,我们就实现了在运行时动态地为对象添加新的功能。

  • 相关阅读:
    C++之10|50例学懂C++
    MySQL优化01-索引
    STM32进行LVGL裸机移植
    计算机网络——物理层(互联网接入技术)
    2023(2024届)计算机保研经验分享,圆梦山东大学
    《OpenDRIVE1.6规格文档》1
    三个线程T1,T2,T3.保证顺序执行的三种方法
    矩阵论理论知识(二)
    Python中property属性、with语句及上下文管理器使用方法代码
    详解风控模型中的逻辑回归评分卡与模型评估内容
  • 原文地址:https://blog.csdn.net/keizhige/article/details/134010801