23种设计模式

1|023种设计模式

设计模式是软件工程中用于解决特定问题的通用解决方案。常见的设计模式有24种,通常分为三大类:创建型、结构型和行为型。下面是对这24种设计模式的详细解释及其归类:

1|01. 创建型模式

1.1 单例模式 (Singleton)

  • 目的:确保一个类只有一个实例,并提供一个全局访问点。
  • 适用场景:系统中需要一个唯一的类实例,如配置管理、日志记录等。

1.2 工厂方法模式 (Factory Method)

  • 目的:定义一个创建对象的接口,但让子类决定实例化哪一个类。
  • 适用场景:当一个类不知道它所需要的对象的具体类时,使用工厂方法创建对象。

1.3 工厂方法模式 (Abstract Factory)

  • 目的:提供一个创建一系列相关或相互依赖对象的接口,而无需指定具体类。
  • 适用场景:需要创建多个系列对象时,如用户界面工具包(按钮、文本框等)。

1.4 建造者模式 (Builder)

  • 目的:使用多个简单的对象一步步构建一个复杂的对象。
  • 适用场景:创建一个复杂对象的过程需要多个步骤,并且这些步骤可能会有变化时。

1.5 原型模式 (Prototype)

  • 目的:通过复制现有的实例来创建新的实例,而不是通过实例化新的对象。
  • 适用场景:当对象创建成本较高时,使用现有的对象复制更为高效。

1|02. 结构型模式

2.1 适配器模式 (Adapter)

  • 目的:将一个类的接口转换成客户希望的另一种接口,使得原本由于接口不兼容而无法一起工作的类能够一起工作。
  • 适用场景:需要将旧系统与新系统兼容时,或者在不同接口之间转换。

2.2 桥接模式 (Bridge)

  • 目的:将抽象部分与实现部分分离,使得它们可以独立变化。
  • 适用场景:在需要将抽象部分与其实现部分解耦,并且它们可能会独立变化时。

2.3 组合模式 (Composite)

  • 目的:将对象组合成树形结构以表示部分-整体层次结构,使得客户端对单个对象和组合对象的使用具有一致性。
  • 适用场景:需要处理部分和整体的层次结构,如文件系统的目录和文件结构。

2.4 装饰者模式 (Decorator)

  • 目的:动态地给对象添加额外的职责,而不改变其结构。
  • 适用场景:需要在运行时为对象添加新功能,而不影响其他对象。

2.5 外观模式 (Facade)

  • 目的:为一组接口提供一个统一的高层接口,使得子系统更易使用。
  • 适用场景:需要简化接口或者对复杂子系统进行简化时。

2.6 享元模式 (Flyweight)

  • 目的:通过共享对象来支持大量的细粒度对象,提高系统性能。
  • 适用场景:需要大量的相似对象而这些对象的创建开销很大时。

2.7 代理模式 (Proxy)

  • 目的:为其他对象提供一种代理以控制对这个对象的访问。
  • 适用场景:需要控制对对象的访问、延迟加载、或者增加功能(如日志)时。

1|03. 行为型模式

3.1 责任链模式 (Chain of Responsibility)

  • 目的:将请求的发送者和接收者解耦,使多个对象都有机会处理请求,形成一条链。
  • 适用场景:需要处理请求的对象链时,如事件处理系统。

3.2 命令模式 (Command)

  • 目的:将请求封装成一个对象,从而使你可以使用不同的请求、排队请求、记录请求日志,以及支持可撤销操作。
  • 适用场景:需要将操作封装成对象以实现命令队列、操作撤销等功能时。

3.3 解释器模式 (Interpreter)

  • 目的:为语言定义一个文法,并提供一个解释器来解释语言中的句子。
  • 适用场景:需要解释或处理特定文法或语言时,如编程语言解析器。

3.4 迭代器模式 (Iterator)

  • 目的:提供一种方法顺序访问集合对象中的元素,而不暴露集合对象的内部表示。
  • 适用场景:需要遍历集合对象的元素时。

3.5 中介者模式 (Mediator)

  • 目的:定义一个对象,通过封装一系列对象的交互来促进对象之间的松耦合。
  • 适用场景:需要处理对象之间复杂的交互时。

3.6 备忘录模式 (Memento)

  • 目的:在不暴露对象内部状态的情况下,保存和恢复对象的状态。
  • 适用场景:需要保存和恢复对象的状态,如撤销操作。

3.7 状态模式 (State)

  • 目的:允许对象在其内部状态改变时改变它的行为。
  • 适用场景:对象的行为依赖于其状态,并且状态可能会发生变化时。

3.8 策略模式 (Strategy)

  • 目的:定义一系列算法,将每一个算法封装起来,并使它们可以互换。
  • 适用场景:需要在运行时选择算法或策略时。

3.9 模板方法模式 (Template Method)

  • 目的:定义一个操作的算法的骨架,将一些步骤延迟到子类中。
  • 适用场景:需要定义一个算法的步骤,并允许子类修改某些步骤的实现时。

3.10 访问者模式 (Visitor)

  • 目的:表示一个作用于对象结构中的各个元素的操作,使得你可以在不改变元素类的前提下定义作用于这些元素的新操作。
  • 适用场景:需要对对象结构中的元素执行一些操作,并且希望在不改变元素类的情况下添加新操作时。

3.11 观察者模式 (Observer)

  • 目的:定义一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象的状态变化。这样,当主题对象的状态发生变化时,所有依赖于它的观察者都会收到通知并自动更新。
  • 适用场景
    • 当一个对象的状态变化需要通知其他多个对象,而这些对象又不知道彼此的情况时。
    • 当一个对象的改变需要触发多个不同的响应时,观察者模式可以解耦状态和响应之间的关系。
    • 在实现分布式事件处理系统时,也很适合使用观察者模式,比如用户界面组件和数据模型的同步。

2|0代码地址

https://gitee.com/lxj_dear/my-pattern


__EOF__

本文作者疾风不问归途
本文链接https://www.cnblogs.com/20lxj666/p/18347514.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   疾风不问归途  阅读(233)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
点击右上角即可分享
微信分享提示