程序设计 26种设计模式,如何分类?
1. 创建型模式 (Creational Patterns)
这些模式关注如何实例化对象。它们通过各种方式封装对象的创建过程,从而提供灵活性和可扩展性。
- 单例模式 (Singleton):确保某个类只有一个实例,并提供全局访问点。
- 工厂方法模式 (Factory Method):定义一个用于创建对象的接口,让子类决定要实例化的具体类。
- 抽象工厂模式 (Abstract Factory):提供一个接口,用于创建一系列相关或相互依赖的对象,而无需指定具体类。
- 建造者模式 (Builder):通过一步一步的构造过程,创建一个复杂对象。
- 原型模式 (Prototype):通过复制现有对象来创建新的对象。
2. 结构型模式 (Structural Patterns)
这些模式关注如何组织和组合类或对象,以实现灵活和高效的结构设计。
- 适配器模式 (Adapter):通过提供一个适配器类,使不兼容的接口能够相互合作。
- 桥接模式 (Bridge):将抽象和实现分离,使得两者可以独立变化。
- 组合模式 (Composite):将对象组合成树形结构,以表示“部分-整体”的层次结构。
- 装饰器模式 (Decorator):动态地为对象添加额外的功能。
- 外观模式 (Facade):提供一个统一的接口,简化子系统的使用。
- 享元模式 (Flyweight):通过共享相同的对象,减少内存的使用。
- 代理模式 (Proxy):为另一个对象提供代理或占位符,以控制对该对象的访问。
3. 行为型模式 (Behavioral Patterns)
这些模式关注对象之间的交互和职责分配,解决对象之间如何有效地协作和通信的问题。
- 责任链模式 (Chain of Responsibility):通过将请求传递给一系列处理者,来实现请求的处理。
- 命令模式 (Command):将请求封装成对象,从而可以通过不同的调用者来执行。
- 解释器模式 (Interpreter):定义一个语言的文法,并通过解释器来解释给定的语句。
- 迭代器模式 (Iterator):提供一种访问集合元素的方法,而不暴露集合的内部结构。
- 中介者模式 (Mediator):通过中介者来控制不同对象之间的交互,减少耦合。
- 备忘录模式 (Memento):在不暴露对象实现细节的情况下,保存和恢复对象的状态。
- 观察者模式 (Observer):当对象状态改变时,自动通知依赖的对象。
- 状态模式 (State):允许对象在其内部状态改变时改变其行为。
- 策略模式 (Strategy):定义一系列算法,将每一个算法封装起来,并使它们可以互换。
- 模板方法模式 (Template Method):定义一个算法的骨架,并允许子类实现某些步骤。
- 访问者模式 (Visitor):通过访问者模式将操作与对象结构分离,允许新增操作而不修改类结构。
4. 并发型模式 (Concurrency Patterns)(扩展的设计模式)
这些模式关注多线程和并发问题,确保多个线程能够安全地协作和执行。
- 生产者-消费者模式 (Producer-Consumer):解决生产者和消费者之间的同步问题。
- 读写锁模式 (Read-Write Lock):允许多个读者同时访问资源,但写者访问时必须独占资源。
- 线程池模式 (Thread Pool):通过维护多个线程池来管理并复用线程,减少频繁创建和销毁线程的开销。
5. 其他扩展模式
除了经典的 23 种设计模式,现代软件开发中,尤其是在云计算、微服务等领域,还出现了更多的设计模式,以下是一些常见的扩展模式:
- 中介者模式 (Mediator):常用于处理复杂系统中的对象交互,减少类之间的耦合。
- 微服务模式 (Microservice Pattern):拆分大型应用为多个独立、自治的服务,以提高系统的可维护性和可扩展性。
- 适配器模式 (Adapter):用于不兼容的系统之间的数据交互和接口调用。
- 过滤器模式 (Filter Pattern):对数据进行过滤处理,通常在多层数据处理过程中使用。
6.总结
根据功能的不同,设计模式通常可以分为以下几类:
- 创建型模式:主要关注如何实例化对象。
- 结构型模式:主要关注类和对象的组织结构。
- 行为型模式:主要关注对象之间的交互和责任分配。
- 并发型模式:关注多线程和并发问题的解决。
- 扩展模式:随着技术的发展,出现了更多适应新需求的设计模式(如微服务模式等)。
原文地址:https://blog.csdn.net/u012314475/article/details/144112588
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!