经典设计模式

以下是23种设计模式的简述,包括名称、特点和适用场景:

创建型模式

  1. 单例模式(Singleton Pattern)

    • 特点 :保证一个类只有一个实例,并提供一个全局访问点。类自己负责保存自己的唯一实例,而不是通过实例化对象来创建。
    • 适用场景 :需要频繁创建和销毁对象的场景,如日志记录、配置管理等。例如在日志记录系统中,如果每次都要创建一个新的日志记录器实例,会浪费资源,因此使用单例模式来保证只有一个实例。
  2. 工厂方法模式(Factory Method Pattern)

    • 特点 :定义一个用于创建对象的接口,但由子类决定实例化哪一个类。工厂方法模式让类的实例化推迟到子类。
    • 适用场景 :创建对象的过程比较复杂,或者需要根据不同的条件创建不同的对象时。例如某个软件需要支持多种数据库,可以通过工厂方法模式,根据配置文件动态选择创建 MySQL 数据库连接对象还是 Oracle 数据库连接对象。
  3. 抽象工厂模式(Abstract Factory Pattern)

    • 特点 :提供一个接口,用于创建相关或相互依赖的对象家族,而无需指定具体类。它强调一系列相关产品对象的设计,用于创建相互依赖的对象而不指定其具体的类。
    • 适用场景 :当需要创建一组相关或相互依赖的对象时,例如构建不同品牌的汽车,每个品牌的汽车都包括引擎、轮胎等部件,抽象工厂可以确保这些部件是相互兼容的。
  4. 建造者模式(Builder Pattern)

    • 特点 :将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。建造者模式逐步构建一个复杂的对象,直到最后完成。
    • 适用场景 :创建复杂对象,且创建过程需要灵活控制,例如构建一款自定义配置的电脑,通过建造者模式可以一步步设置 CPU、显卡、内存等部件。
  5. 原型模式(Prototype Pattern)

    • 特点 :通过复制现有实例来创建新的实例。原型模式是一种基于克隆的创建方式,但依赖于语言自身的克隆方法。
    • 适用场景 :创建新对象成本较高,且可以通过复制现有对象来创建新对象的场景。例如在一些图形编辑软件中,当需要创建一个与现有图形相似但部分属性不同的新图形时,可以通过克隆原有图形,再修改部分属性来实现。

结构型模式

  1. 适配器模式(Adapter Pattern)

    • 特点 :将一个类的接口转换成客户希望的另一个接口。它可以使原本由于接口不兼容而不能一起工作的那些类可以一起工作。
    • 适用场景 :需要使用现有类的功能,但其接口不符合需求的场景。例如老系统有一个旧的接口,但新系统需要一个新的接口,可以通过适配器模式将旧系统的接口适配到新系统的接口中。
  2. 装饰器模式(Decorator Pattern)

    • 特点 :动态地将责任附加到对象上,提供比继承更灵活的解决方案。装饰者模式可以在不改变原有对象结构的情况下,通过包装原有对象来增强功能。
    • 适用场景 :需要在不改变原有对象结构的情况下,动态地添加功能或职责的场景。例如在文本编辑器中,可以在不改变文本原有内容的情况下,通过装饰器模式为文本添加不同格式的效果,如加粗、斜体等。
  3. 代理模式(Proxy Pattern)

    • 特点 :为其他对象提供一个代理以控制对这个对象的访问。代理模式可以在实际对象的基础上对功能进行扩展,使实际对象的使用更加安全和灵活。
    • 适用场景 :需要在不改变原有对象的情况下,控制对其的访问或增加额外功能的场景。例如在远程服务调用中,代理对象可以处理网络通信、安全认证等工作,实际对象只需要实现业务逻辑。
  4. 外观模式(Facade Pattern)

    • 特点 :提供一个统一的接口,用来访问子系统中的一群接口,使子系统更容易使用。外观模式可以简化对复杂子系统的访问过程。
    • 适用场景 :需要简化复杂系统的接口,提供一个更简单的使用方式的场景。例如计算机硬件接口极其复杂,但计算机开机使用外观模式简化了这个过程,按下开机按钮就可以启动计算机。
  5. 桥接模式(Bridge Pattern)

    • 特点 :将抽象部分与实现部分分离,使它们可以独立变化。桥接模式将接口部分和实现部分分开,使得两者可以独立扩展。
    • 适用场景 :需要在抽象和实现之间进行解耦,使它们可以独立变化的场景。例如电视和遥控器,不同的品牌电视和不同类型的遥控器可以通过桥接模式结合起来,而不需要每个品牌都为每种遥控器类型提供支持。
  6. 组合模式(Composite Pattern)

    • 特点 :将对象组合成树形结构以表示部分 - 整体的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
    • 适用场景 :需要表示对象的部分 - 整体层次结构,如文件系统、组织结构等场景。例如文件系统中,目录和文件都可以通过组合模式统一处理,用户可以像操作单个文件一样操作目录。
  7. 享元模式(Flyweight Pattern)

    • 特点 :运用共享技术有效地支持大量细粒度的对象。享元模式通过共享相同状态的对象来减少内存占用。
    • 适用场景 :需要大量相似对象,且可以通过共享减少内存占用的场景。例如在文本编辑器中,字符对象可以通过享元模式共享相同的字体、字号等属性,减少内存中存储的字符对象的数量。

行为型模式

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

    • 特点 :使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。
    • 适用场景 :需要将请求沿着处理链传递,直到被处理的场景。例如在审批系统中,审批请求需要经过多个环节的审批,每个审批环节都有可能处理请求或者将其传递给下一个环节。
  2. 命令模式(Command Pattern)

    • 特点 :将请求封装为对象,从而使用户可以用不同的请求、队列或者日志来参数化其他对象。命令模式可以将请求的发起者和请求的执行者解耦。
    • 适用场景 :需要将操作封装为对象,以便使用不同的请求、队列或日志来参数化其他对象的场景。例如在 GUI 程序中,按钮的点击事件可以封装为命令对象,执行不同的操作。
  3. 解释器模式(Interpreter Pattern)

    • 特点 :给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
    • 适用场景 :需要解释特定语言的场景,例如实现简单的数学表达式求值、配置文件解析等。
  4. 迭代器模式(Iterator Pattern)

    • 特点 :提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。迭代器模式可以隐藏聚合对象的内部结构。
    • 适用场景 :需要顺序访问聚合对象中的元素,但又不想暴露其内部结构的场景。例如在集合类中,通过迭代器可以遍历集合中的元素,而无需了解集合内部的存储方式。
  5. 中介者模式(Mediator Pattern)

    • 特点 :用一个中介对象来封装一系列的对象交互。中介者模式将对象之间的交互过程封装到中介者对象中,减少了对象之间的直接耦合。
    • 适用场景 :需要减少多个对象之间的交互复杂度,使它们可以独立变化的场景。例如在聊天室中,每个用户之间的消息传递可以通过中介者(聊天室服务器)来管理,避免用户之间的直接交互。
  6. 备忘录模式(Memento Pattern)

    • 特点 :在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
    • 适用场景 :需要保存和恢复对象的内部状态的场景。例如在游戏存档中,玩家可以将游戏进程保存为备忘录,以便在需要时恢复游戏状态。
  7. 观察者模式(Observer Pattern)

    • 特点 :定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。观察者模式是一种发布 - 订阅模式。
    • 适用场景 :需要在对象状态改变时通知多个观察者的场景。例如天气预报系统中,当气象站的天气数据发生变化时,多个客户端(如气象网站、手机应用)可以实时更新显示。
  8. 状态模式(State Pattern)

    • 特点 :允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。状态模式将对象的行为封装在不同的状态对象中。
    • 适用场景 :需要根据对象的状态改变其行为的场景。例如自动售货机根据不同的状态(如无币状态、有币状态、缺货状态等)执行不同的操作。
  9. 策略模式(Strategy Pattern)

    • 特点 :定义一系列算法,把它们一个个封装起来,并且使它们可以相互替换。策略模式让算法独立于使用它的客户而变化。
    • 适用场景 :需要在运行时选择不同的算法或行为的场景。例如在数据排序中,可以根据需要选择不同的排序策略,如快速排序、冒泡排序等。
  10. 模板方法模式(Template Method Pattern)

    • 特点 :定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
    • 适用场景 :需要定义算法的骨架,而将具体步骤留给子类实现的场景。例如项目研发流程,主体流程是固定的,但某些细节可以根据项目特点在子类中实现。
  11. 访问者模式(Visitor Pattern)

    • 特点 :表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。
    • 适用场景 :需要对一个对象结构中的元素添加新的操作,而不需要修改原有类的场景。例如在组织架构中,需要对不同类型的员工(如普通员工、经理等)进行不同的绩效考核操作。

posted on   摆渡人19966  阅读(3)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示