目录
一、设计模式概述
二、设计模式的分类(总共有 25 种设计模式)
1、创建型模式(5种)
2、结构型模式(8种)
3、行为型模式(12种)
三、设计模式的优点和缺点
1、设计模式的优点:
2、设计模式的缺点:
一、设计模式概述
设计模式是在软件开发过程中常见的解决问题的方法和思想的总结和抽象。它们是经过实践验证的,并且在特定情况下被广泛接受和应用。
有很多经典的设计模式书籍,如
(1)《设计模式:可复用面向对象软件的基础》(Design Patterns: Elements of Reusable Object-Oriented Software)
四位作者合称 GOF(四人帮,全拼 Gang of Four)。他们所提出的设计模式主要是基于以下的面向对象设计原则。
- 对接口编程而不是对实现编程。
- 优先使用对象组合而不是继承。
(2)《大话设计模式》(程杰)
二、设计模式的分类(总共有 25 种设计模式)
1、创建型模式(5种)
这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。
(1)工厂模式(Factory Pattern):通过工厂类创建对象,而不是直接实例化对象。
(2)抽象工厂模式(Abstract Factory Pattern):提供一个接口来创建一系列相关或相互依赖的对象。
(3)单例模式(Singleton Pattern):确保一个类只有一个实例,并提供全局访问点。
(4)建造者模式(Builder Pattern):将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。
(5)原型模式(Prototype Pattern):通过复制现有对象来创建新对象,而不是使用new操作符。
2、结构型模式(8种)
这些模式关注对象之间的组合和关系,旨在解决如何构建灵活且可复用的类和对象结构
(1)适配器模式(Adapter Pattern):将一个类的接口转换成客户端所期望的另一个接口。
(2)桥接模式(Bridge Pattern):将抽象部分与实现部分分离,使它们可以独立变化。
(3)过滤器模式(Filter、Criteria Pattern):这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。这种类型的设计模式属于结构型模式,它结合多个标准来获得单一标准。
(4)组合模式(Composite Pattern):将对象组合成树形结构以表示整体-部分的层次结构。
(5)装饰器模式(Decorator Pattern):动态地给对象添加额外的职责。
(6)外观模式(Facade Pattern):提供一个简化的接口,隐藏系统的复杂性。
(7)享元模式(Flyweight Pattern):通过共享对象来减少内存使用。
(8)代理模式(Proxy Pattern):为其他对象提供一个代理以控制对这个对象的访问。
3、行为型模式(12种)
这些模式关注对象之间的通信和交互,旨在解决对象之间的责任分配和算法的封装。
(1)责任链模式(Chain of Responsibility Pattern):将请求的发送者和接收者解耦,使多个对象都有机会处理这个请求。
(2)命令模式(Command Pattern):将请求封装成对象,以便可以用不同的请求对客户端进行参数化。
(3)解释器模式(Interpreter Pattern):给定一个语言,定义它的文法的一种表示,并定义一个解释器,用来解释语言中的句子。
(4)迭代器模式(Iterator Pattern):提供一种顺序访问一个聚合对象中各个元素的方法,而又不暴露该对象的内部表示。
(5)中介者模式(Mediator Pattern):通过一个中介对象来封装一系列对象之间的交互。
(6)备忘录模式(Memento Pattern):在不破坏封装性的前提下,捕获一个对象的内部状态,并在对象之外保存这个状态。
(7)观察者模式(Observer Pattern):定义对象间的一种一对多的依赖关系,使得当一个对象的状态改变时,所有依赖它的对象都会得到通知并自动更新。
(8)状态模式(State Pattern):允许对象在内部状态改变时改变它的行为。
(9)空对象模式(Null Object Pattern):一个空对象取代 NULL 对象实例的检查。Null 对象不是检查空值,而是反应一个不做任何动作的关系。这样的 Null 对象也可以在数据不可用的时候提供默认的行为。
(10)策略模式(Strategy Pattern):定义一系列算法,将它们封装起来,并使它们可以互相替换。
(11)模板模式(Template Pattern):定义一个算法的骨架,将一些步骤延迟到子类中实现。
(12)访问者模式(Visitor Pattern):将算法与对象结构分离,并在不改变对象结构的前提下定义新的操作。
三、设计模式的优点和缺点
1、设计模式的优点:
(1)提供了一种共享的设计词汇和概念,使开发人员能够更好地沟通和理解彼此的设计意图。
(2)提供了经过验证的解决方案,可以提高软件的可维护性、可复用性和灵活性。
(3)促进了代码的重用,避免了重复的设计和实现。
(4)通过遵循设计模式,可以减少系统中的错误和问题,提高代码质量。
2、设计模式的缺点:
(1)学习和理解成本高:设计模式需要花费一定的时间和精力去学习和理解,特别是对于初学者来说可能会感到困惑和复杂。
(2)过度设计:有时候为了使用设计模式而过度设计,导致代码变得复杂和难以维护。在某些情况下,简单的解决方案可能更加适合。
(3)增加代码复杂性:设计模式需要引入额外的类和接口,增加了代码的复杂性和维护成本。
(4)可能降低性能:某些设计模式在提供灵活性的同时可能会带来额外的开销,导致性能下降。
(5)增加了系统的抽象层级:设计模式引入了一些抽象概念和层级,使得系统更加复杂和难以理解。
(6)不适用于所有场景:设计模式并不是适用于所有场景的,有些场景可能没有明显的问题需要解决,使用设计模式反而会增加不必要的复杂性。
需要注意的是,设计模式并不是万能的解决方案,应该根据具体的需求和情况来选择是否使用设计模式。