设计模式:创建型、结构型、行为型

设计模式是一套可重用的解决方案,用于解决软件设计中的常见问题。
设计模式分为三大类:创建型模式、结构型模式和行为型模式。

一、创建型设计模式

创建型模式关注对象的创建过程,旨在以灵活和高效的方式创建对象。它们有助于将系统与对象的创建过程解耦,使系统更独立于具体实现。

  1. 单例模式(Singleton)

    • 特点:确保一个类只有一个实例,并提供一个全局访问点。
    • 使用场景:需要确保一个类只有一个实例,如配置管理器、资源管理器等。
  2. 工厂方法模式(Factory Method)

    • 特点:定义一个创建对象的接口,但由子类决定实例化哪一个类。
    • 使用场景:当具体类的实例化需要延迟到子类时,如日志记录器、连接池等。
  3. 抽象工厂模式(Abstract Factory)

    • 特点:提供一个接口,用于创建一族相关或依赖对象,而无需指定具体类。
    • 使用场景:系统需要一组相关或依赖的产品对象时,如UI组件的跨平台开发。
  4. 建造者模式(Builder)

    • 特点:将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。
    • 使用场景:需要创建复杂对象,且对象的创建过程独立于其组成部分时,如创建复杂的文档对象。
  5. 原型模式(Prototype)

    • 特点:通过复制现有实例来创建新对象,避免重复的初始化过程。
    • 使用场景:需要大量相似对象的场景,如编辑器中的图形工具。

二、结构型设计模式

结构型模式关注对象间的组合,以便更好地扩展和维护系统结构。

  1. 适配器模式(Adapter)

    • 特点:将一个类的接口转换成客户希望的另一个接口,使得原本由于接口不兼容而无法一起工作的类可以一起工作。
    • 使用场景:现有类的接口不符合需求时,如旧系统的接口兼容问题。
  2. 桥接模式(Bridge)

    • 特点:将抽象部分与它的实现部分分离,使它们可以独立变化。
    • 使用场景:需要在抽象和实现之间进行解耦时,如跨平台UI工具。
  3. 组合模式(Composite)

    • 特点:将对象组合成树形结构以表示“部分-整体”的层次结构。使得客户可以一致地对待单个对象和对象组合。
    • 使用场景:需要表示对象的部分-整体层次结构时,如文件系统的目录结构。
  4. 装饰模式(Decorator)

    • 特点:动态地给对象添加一些额外的职责,提供了比继承更灵活的扩展功能。
    • 使用场景:需要动态地给对象添加功能时,如图形界面组件的装饰。
  5. 外观模式(Facade)

    • 特点:为子系统中的一组接口提供一个一致的界面,使得子系统更容易使用。
    • 使用场景:简化复杂系统的使用,如库的封装。
  6. 享元模式(Flyweight)

    • 特点:运用共享技术来有效地支持大量细粒度对象的复用。
    • 使用场景:需要大量细粒度对象且大部分状态可以共享时,如文本编辑器中的字符对象。
  7. 代理模式(Proxy)

    • 特点:为其他对象提供一种代理以控制对这个对象的访问。
    • 使用场景:需要控制对某个对象的访问时,如远程代理、虚拟代理等。

三、行为型设计模式

行为型模式关注对象之间的通信和职责分配,确保系统行为灵活、可扩展。

  1. 责任链模式(Chain of Responsibility)

    • 特点:将请求沿着处理链传递,直到有一个对象处理它。
    • 使用场景:多个对象可以处理同一请求,但具体处理者在运行时决定时,如事件处理机制。
  2. 命令模式(Command)

    • 特点:将请求封装成对象,以便使用不同的请求、队列或日志请求来参数化其他对象。
    • 使用场景:需要对请求进行参数化和记录日志时,如命令队列。
  3. 解释器模式(Interpreter)

    • 特点:为语言的语法表示定义一个解释器,使用该解释器来解释语言中的句子。
    • 使用场景:需要解释语言的场景,如编译器、规则引擎。
  4. 迭代器模式(Iterator)

    • 特点:提供一种方法顺序访问聚合对象中的各个元素,而不暴露其内部表示。
    • 使用场景:需要遍历聚合对象的不同方式时,如容器类的迭代。
  5. 中介者模式(Mediator)

    • 特点:用一个中介对象来封装一系列对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散。
    • 使用场景:对象之间的通信复杂且相互依赖时,如GUI组件的协作。
  6. 备忘录模式(Memento)

    • 特点:在不破坏封装的前提下,捕获对象的内部状态,并在以后恢复它。
    • 使用场景:需要保存和恢复对象状态时,如撤销功能。
  7. 观察者模式(Observer)

    • 特点:定义对象间的一种一对多的依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并自动更新。
    • 使用场景:一个对象的改变需要通知其他对象时,如事件监听机制。
  8. 状态模式(State)

    • 特点:允许对象在内部状态改变时改变其行为,使得对象看起来像是改变了其类。
    • 使用场景:对象行为随状态变化而变化时,如有限状态机。
  9. 策略模式(Strategy)

    • 特点:定义一系列算法,把它们封装起来,并使它们可以互相替换。
    • 使用场景:需要动态选择算法时,如不同的排序算法。
  10. 模板方法模式(Template Method)

    • 特点:定义算法的骨架,而将一些步骤延迟到子类中。
    • 使用场景:多个类具有相似的逻辑时,如框架的钩子方法。
  11. 访问者模式(Visitor)

    • 特点:封装一些作用于某种数据结构中各元素的操作,可以在不改变数据结构的前提下定义作用于这些元素的新的操作。
    • 使用场景:需要对不同类型的对象进行不同的操作时,如对象结构的操作。

如何分辨使用

  1. 创建型模式:当需要灵活的对象创建机制以避免复杂的实例化过程时使用,如单例模式确保唯一实例、工厂方法模式隐藏具体类、抽象工厂模式创建一族相关对象、建造者模式构建复杂对象、原型模式通过复制创建对象。

  2. 结构型模式:当需要简化对象间关系和提高系统结构的可维护性时使用,如适配器模式用于接口兼容、桥接模式用于解耦抽象和实现、组合模式用于表示部分-整体层次结构、装饰模式用于动态添加功能、外观模式用于简化接口、享元模式用于对象共享、代理模式用于控制访问。

  3. 行为型模式:当需要管理对象间的复杂通信和职责分配时使用,如责任链模式用于请求传递、命令模式用于请求封装、解释器模式用于语言解释、迭代器模式用于遍历对象、中介者模式用于对象通信、备忘录模式用于状态保存、观察者模式用于状态变化通知、状态模式用于行为变化、策略模式用于算法选择、模板方法模式用于算法骨架、访问者模式用于操作对象结构。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

风不归Alkaid

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

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

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

打赏作者

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

抵扣说明:

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

余额充值