设计模式—装饰模式

与其明天开始,不如现在行动!


装饰模式—穿衣服

装饰模式(Decorator)可以动态的给对象添加一些额外的职责。

在这里插入图片描述

Component是定义一个对象接口,可以给这些对象动态地添加职责。ConcreteComponent是定义了一个具体的对象,也可以给这个对象添加一些职责。Decorator,装饰抽象类,从外类来扩展Component类的功能,但是对于Component来说,是不需要知道Decorator的存在。

现在有一个装扮游戏,需要你给主角穿衣服,最后只需要在控制台打印出来穿的什么衣服就行。利用装饰模式的思想,有一个接口可以给对象动态的添加职责;有一个具体的要装饰的人,还要有一个装饰的抽象类,所有具体的装饰类都继承这个装饰抽象类。

Component对象接口:

public interface ICharacter {
   
    void show();
}

具体的对象:

public class Person implements ICharacter{
   
    private String name;
    public Person(String name) {
   
        this.name = name;
    }
    @Override
    public void show() {
   
        System.out.println("装扮的" + name);
    }
}

装饰抽象类:

public abstract class Finery implements ICharacter{
   
    protected ICharacter component;
    public void decorate(ICharacter component) {
   
        this.component = component;
    }

    @Override
    public void show() {
   
        if (component != null) {
   
            this.component.show();
        }
    }
}

具体的装饰类:

运动裤

public class SweatPants extends Finery{
   
    @Override
    public void show() {
   
        System.out.print("运动裤");
        super.show();
    }
}

T恤衫:

public class TShirt extends Finery{
   

    @Override
    public void show() {
   
        System.out.print("T恤衫");
        super.show();
    }
}

西装:

public class Suit extends Finery{
   
    @Override
    public void show() {
   
        System.out.print("西装");
        super.show();
    }
}

皮鞋:

public class LeatherShoes extends Finery{
   
    @Override
    public void show() {
   
        System.out.print("皮鞋");
        super.show();
    }
}

程序的UML图:

穿衣服的程序UML图

总结:

装饰模式不需要向旧的类中添加新的装饰代码,它提供了一个非常好的解决方案,它把每个要装饰的功能放在单独的类中,让这个类包装它所需要的装饰对象。总而言之,装饰功能就是将类中的装饰功能从类中移除,可以简化原有的类。

装饰模式有效的把类的核心职责和装饰功能区分开了,而且可以去除相关类中重复的装饰逻辑。

装饰模式理解


💎总结

本文中若是有出现的错误请在评论区或者私信指出,我再进行改正优化,如果文章对你有所帮助,请给博主一个宝贵的三连,感谢大家😘!!!


相关推荐

  1. 设计模式装饰模式

    2023-12-18 08:02:03       20 阅读
  2. 设计模式装饰模式

    2023-12-18 08:02:03       44 阅读
  3. 设计模式-装饰模式 Decorator

    2023-12-18 08:02:03       30 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-18 08:02:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-18 08:02:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-18 08:02:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-18 08:02:03       20 阅读

热门阅读

  1. uniapp上传文件api如何使用

    2023-12-18 08:02:03       41 阅读
  2. 【Vue原理解析】之虚拟DOM

    2023-12-18 08:02:03       40 阅读
  3. RabbitMQ

    2023-12-18 08:02:03       34 阅读
  4. 重温经典struts1之八种页面跳转或请求转发的方式

    2023-12-18 08:02:03       38 阅读
  5. Kotlin(十六) 高阶函数的简单应用

    2023-12-18 08:02:03       36 阅读
  6. Spring Boot Kotlin支持中文文档

    2023-12-18 08:02:03       37 阅读
  7. 《Kotlin核心编程》笔记:设计模式

    2023-12-18 08:02:03       28 阅读