• 设计模式-装饰器模式


            装饰器模式(Decorator Pattern)是一种设计模式,它允许在运行时动态地给一个对象添加额外的功能,而不需要修改原始对象的结构。

            在Java中,装饰器模式可以通过以下方式实现:

            1. 创建一个接口(Component),定义了原始对象和装饰器对象的共同行为。

            2. 创建一个具体的实现类(ConcreteComponent),实现了接口,并提供了原始对象的具体实现。

            3. 创建一个装饰器类(Decorator),实现了接口,并包含一个对Component对象的引用。装饰器类可以在调用原始对象的方法之前或之后添加额外的功能。

            4. 创建具体的装饰器类(具体的Decorator类),继承自装饰器类,并在调用原始对象的方法之前或之后添加特定的功能。

            以下是一个简单的示例代码,演示了如何使用装饰器模式:

    1. // 接口
    2. interface Shape {
    3. void draw();
    4. }
    5. // 具体实现类
    6. class Circle implements Shape {
    7. @Override
    8. public void draw() {
    9. System.out.println("Drawing a circle");
    10. }
    11. }
    12. // 装饰器类
    13. abstract class ShapeDecorator implements Shape {
    14. protected Shape decoratedShape;
    15. public ShapeDecorator(Shape decoratedShape) {
    16. this.decoratedShape = decoratedShape;
    17. }
    18. @Override
    19. public void draw() {
    20. decoratedShape.draw();
    21. }
    22. }
    23. // 具体的装饰器类
    24. class RedShapeDecorator extends ShapeDecorator {
    25. public RedShapeDecorator(Shape decoratedShape) {
    26. super(decoratedShape);
    27. }
    28. @Override
    29. public void draw() {
    30. decoratedShape.draw();
    31. setRedBorder();
    32. }
    33. private void setRedBorder() {
    34. System.out.println("Setting red border");
    35. }
    36. }
    37. // 客户端
    38. public class Main {
    39. public static void main(String[] args) {
    40. Shape circle = new Circle();
    41. Shape redCircle = new RedShapeDecorator(new Circle());
    42. circle.draw();
    43. System.out.println("---");
    44. redCircle.draw();
    45. }
    46. }

            在这个示例中,Shape接口定义了原始对象和装饰器对象的共同行为。Circle类是具体的实现类,实现了Shape接口,并提供了原始对象的具体实现。

            ShapeDecorator类是装饰器类,实现了Shape接口,并包含一个对Component对象的引用。在draw方法中,装饰器类调用原始对象的draw方法。

            RedShapeDecorator类是具体的装饰器类,继承自装饰器类,并在调用原始对象的draw方法之前或之后添加特定的功能。在这个示例中,RedShapeDecorator类在调用原始对象的draw方法之后,添加了设置红色边框的功能。

            在客户端中,通过实例化具体的装饰器类来使用装饰器模式。客户端可以选择性地添加多个装饰器,以实现不同的功能组合。

            装饰器模式允许在运行时动态地给一个对象添加额外的功能,而不需要修改原始对象的结构。这提供了更大的灵活性和可扩展性,同时遵循了开闭原则。

  • 相关阅读:
    【机器学习】集成学习:使用scikitLearn中的BaggingClassifier实现bagging和pasting策略
    GTA5需要什么配置?
    SpringBoot快速打包
    flutter 打包 exe
    springboot增加license授权认证
    力扣(LeetCode)2530. 执行 K 次操作后的最大分数(C++)
    美团一面败在Redis,熬夜整理Redis 面试中常见的题目(附答案),3个月后卷土重来,成功拿下Offer!
    dbeaver下载镜像站
    nodejs+vue宁夏旅游景点客流量数据分析
    【区块链 | 智能合约】Ethereum源代码(11)- 以太坊核心BlockChain源码分析
  • 原文地址:https://blog.csdn.net/m0_65014849/article/details/133946368