23种设计模式

1、什么是设计模式

设计模式是一套被反复使用、被广泛认可并经过验证的面向对象软件开发经验总结。它们提供了解决特定问题的可重用方案,有助于提高代码的可维护性、可读性和可扩展性。在软件开发中,设计模式是一种重要的工具,可以帮助开发者避免常见的设计错误并更有效地构建软件。

2、设计模式分类:

创建型模式(Creational Patterns),共五种:这些模式关注对象的创建过程,隐藏实例化逻辑,以使系统更加灵活。常见的创建型模式有:单例模式、工厂方法模式、抽象工厂模式、建造者模式和原型模式。

结构型模式(Structural Patterns),共七种:这些模式关注类和对象如何组合在一起以形成更大的结构,以满足系统的需求。常见的结构型模式有:适配器模式、桥接模式、装饰器模式、外观模式、享元模式和组合模式。

行为型模式(Behavioral Patterns),共十一种:这些模式关注对象之间的通信方式,以便更好地组织代码和相互协作。常见的行为型模式有:策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式和中介者模式。

3、每种设计模式的简要解释:

  1. 单例模式:
    确保一个类只有一个实例,并提供全局访问点。通过私有化构造函数和静态方法获取唯一实例,确保多个对象之间共享相同的状态。适用于需要共享资源、节省内存或确保全局唯一性的情况。

  2. 工厂方法模式:
    定义一个创建对象的接口,让子类决定实例化哪个类。通过在父类中定义创建对象的方法,将对象的具体创建推迟到子类中。适用于创建复杂对象,以及提供一种统一的对象创建方式。

  3. 抽象工厂模式:
    提供一组创建相关对象的接口,让子类决定实例化哪个系列的对象。通过在抽象工厂中定义一系列的创建方法,子类实现不同的工厂,用于创建一族相关的产品。适用于需要创建一组相关对象,并保持产品族的一致性。

  4. 建造者模式:
    将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。通过将构建步骤解耦,让相同的构建过程可以创建不同的产品。适用于创建复杂对象,且对象的组成部分多变。

  5. 原型模式:
    通过复制现有对象来创建新对象,避免创建过程的复杂性。通过克隆已有的对象,避免重复的初始化操作,提高性能和灵活性。适用于创建对象成本较大,但又需要频繁创建相似对象的情况。

  6. 适配器模式:
    将一个类的接口转换成客户端所期望的接口,使得原本不兼容的类可以合作。通过一个适配器类,将原有类的接口转换成目标接口。适用于需要复用现有类,但接口与现有系统不匹配的情况。

  7. 桥接模式:
    将抽象部分与实现部分分离,使它们可以独立地变化。通过分离抽象类和实现类,使两者可以独立演化。适用于存在多种变化维度的情况,从而避免类爆炸。

  8. 装饰器模式:
    动态地给对象添加额外的职责,而不影响其行为。通过将对象包裹在装饰器中,逐层地为对象添加功能。适用于在不改变原有对象结构的情况下,给对象添加额外功能。

  9. 外观模式:
    为子系统提供一个统一的接口,简化客户端与子系统之间的交互。通过提供一个高层接口,隐藏子系统的复杂性,使得客户端更加简单。适用于简化庞大复杂系统的使用和交互。

  10. 享元模式:
    共享细粒度对象,以减少内存占用。通过共享共同部分,减少对象的数量,节省内存。适用于大量对象共享大部分内部状态,且对象数量庞大的情况。

  11. 组合模式:
    将对象组合成树形结构以表示"部分-整体"的层次结构。通过将对象和组合对象一视同仁,形成统一的树形结构。适用于处理树形结构的数据,且希望一致对待单个对象和组合对象。

  12. 策略模式:
    定义一系列算法,将它们封装起来,并且可以相互替换使用。通过将不同算法封装成策略类,实现算法的动态切换。适用于需要在运行时选择不同算法的情况。

  13. 模板方法模式:
    定义一个算法的骨架,将一些步骤延迟到子类中实现。通过定义一个模板方法,固定算法骨架,而将具体实现留给子类。适用于一系列算法拥有相同的步骤,但各步骤实现不同时的情况。

  14. 观察者模式:
    定义对象之间的一对多依赖关系,当一个对象改变状态,所有依赖它的对象都会收到通知。通过定义观察者和被观察者接口,实现对象之间的松耦合。适用于一个对象的改变需要通知多个其他对象的情况。

  15. 迭代器模式:
    提供一种顺序访问集合对象元素的方法,而无需暴露集合的内部表示。通过定义迭代器接口,实现对集合对象的统一访问。适用于需要遍历集合对象,但不想暴露其内部结构的情况。

  16. 责任链模式:
    将请求的发送者和接收者解耦,将多个处理器连接成一条链,直到有处理器能够处理该请求。通过将处理器连接成链条,实现请求的传递和处理。适用于处理请求的对象存在多个处理器,但需要动态确定实际处理者的情况。

  17. 命令模式:
    将请求封装成对象,以便将不同的请求排队、记录请求日志、撤销请求等。通过将命令封装成对象,实现请求发送者和请求接收者的解耦。适用于需要将请求封装成对象,以便进行操作记录和撤销操作的情况。

  18. 备忘录模式:
    保存对象的内部状态,以便在后续恢复该状态。通过将对象的状态保存在备忘录中,实现状态的保存和恢复。适用于需要保存对象历史状态,以便进行撤销或回滚的情况。

  19. 状态模式:
    允许对象在其内部状态发生改变时改变其行为。通过将不同状态封装成状态类,实现对象行为的动态切换。适用于对象的行为受到内部状态影响,且行为随状态变化而变化的情况。

  20. 访问者模式:
    定义一系列操作,使其可以应用于对象结构中的各个元素。通过将操作封装成访问者,实现对元素的透明访问。适用于对象结构中元素的类型和操作的类型都需要变化的情况。

  21. 中介者模式:
    通过一个中介对象来封装一系列对象之间的交互,从而使其耦合松散。通过将对象之间的交互集中在中介者中,减少对象之间的直接依赖。适用于存在多个对象之间复杂的相互依赖关系,导致耦合度较高的情况。

  22. 解释器模式:
    提供了一种解释语言的方法,用于解决特定问题。通过定义解释器类和解释器环境,实现对语言的解释和执行。适用于需要解释执行一种特定语言或表达式的情况。

  23. 空对象模式:
    使用一个空对象来代替 NULL,避免条件检查。通过定义一个空对象类,代表空值,避免对空对象的额外处理。适用于需要处理空值,而不想频繁检查空对象的情况。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

7_an

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值