1-5-1-设计模式与OOP

理解23种设计模式如何体现面向对象(OOP)思想,能帮助我们在设计和编码时更好地运用这些模式。下面我将这些设计模式按类型分类,并说明它们如何体现了OOP的核心理念。

一、设计模式及其OOP思想

下面是23种设计模式及其体现的OOP思想的汇总表:

模式类型 设计模式 核心OOP思想体现 简要说明
创建型 单例 (Singleton) 封装(控制实例创建)、单一职责(保证一个类仅有一个实例) 确保一个类只有一个实例,并提供一个全局访问点。
原型 (Prototype) 封装(隐藏对象创建细节) 用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。
工厂方法 (Factory Method) 多态(子类决定创建对象)、依赖倒置(依赖抽象而非具体类) 定义一个创建对象的接口,但由子类决定要实例化的类是哪一个。
抽象工厂 (Abstract Factory) 封装(封装产品族创建)、多态(不同工厂生产不同产品) 提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
建造者 (Builder) 封装(分步构建复杂对象)、单一职责(将构造代码与表示代码分离) 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
结构型 适配器 (Adapter) 组合(对象适配器)、多态(适配目标接口) 将一个类的接口转换成客户希望的另外一个接口。
桥接 (Bridge) 组合(代替继承)、抽象与实现分离 将抽象部分与它的实现部分分离,使它们都可以独立地变化。
组合 (Composite) 递归组合(部分-整体层次结构)、多态(统一处理单个对象和组合对象) 将对象组合成树形结构以表示“部分-整体”的层次结构。
装饰器 (Decorator) 组合(动态添加功能)、开闭原则(扩展开放,修改关闭) 动态地给一个对象添加一些额外的职责。
外观 (Facade) 封装(简化子系统接口)、迪米特法则(减少客户端与子系统的耦合) 提供了一个统一的接口,用来访问子系统中的一群接口。
享元 (Flyweight) 封装(共享细粒度对象)、节省资源 运用共享技术有效地支持大量细粒度的对象。
代理 (Proxy) 封装(控制访问)、间接性 为其他对象提供一种代理以控制对这个对象的访问。
行为型 职责链 (Chain of Responsibility) 低耦合(解耦发送者和接收者) 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。
命令 (Command) 封装(将请求封装为对象)、单一职责(解耦触发和执行) 将一个请求封装成一个对象,从而使你可以用不同的请求对客户进行参数化。
解释器 (Interpreter) 封装(封装语言规则)、单一职责(文法规则表示) 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
迭代器 (Iterator) 封装(封装遍历细节)、单一职责(分离集合结构与遍历算法) 提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。
中介者 (Mediator) 迪米特法则(减少对象间直接通信)、封装(集中控制交互) 用一个中介对象来封装一系列的对象交互。
备忘录 (Memento) 封装(捕获并外部化对象状态)、信息隐藏(原发器之外的对象不能访问备忘录内部状态) 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
观察者 (Observer) 抽象耦合(主题和观察者依赖抽象)、开闭原则(易于增加新观察者) 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
状态 (State) 封装(状态行为局部化)、多态(不同状态不同行为) 允许一个对象在其内部状态改变时改变它的行为。
策略 (Strategy) 封装(封装算法)、多态(可互换的算法)、开闭原则(易于增加新策略) 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。
模板方法 (Template Method) 封装(固定算法骨架)、多态(子类重定义步骤) 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。
访问者 (Visitor) 开闭原则(易于增加新操作)、双重分发 表示一个作用于某对象结构中的各元素的操作。

二、理解设计模式与OOP原则

设计模式是面向对象设计原则的具体体现和成功应用。它们不是语法规定,而是一套用来提高代码可复用性、可读性、可维护性、稳健性及安全性的解决方案。

常见的OOP原则(如SOLID)是许多设计模式的基础:

  • 开闭原则:对扩展开放,对修改关闭。策略模式、装饰器模式、观察者模式等都很好地体现了这一原则。
  • 依赖倒置原则:高层模块不应该依赖低层模块,二者都应该依赖于抽象。工厂方法模式、抽象工厂模式是这一原则的典型应用。
  • 单一职责原则:一个类应该只有一个引起变化的原因。许多模式如命令模式、迭代器模式都遵循了这一原则。
  • 里氏替换原则:子类必须能够替换掉它们的父类型。这是实现多态的基础,几乎所有基于继承的模式都隐含此原则。
  • 接口隔离原则:使用多个专门的接口,而不使用单一的总接口。这有助于避免“胖接口”问题。
  • 迪米特法则(最少知识原则):一个对象应该对其他对象有最少的了解。外观模式、中介者模式是这一法则的直接体现。
  • 合成复用原则:尽量使用对象组合/聚合,而不是继承来达到复用的目的。桥接模式、组合模式、装饰器模式等都优先使用组合。

三、运用设计模式的注意事项

  1. 理解优于记忆:不要死记硬背23种模式。理解其意图解决的问题以及优缺点更重要。
  2. 原则指导模式:深刻理解OOP设计原则,它们能指导你何时该使用何种模式,甚至是在没有现成模式可用时自己做出良好的设计。
  3. 过度设计是陷阱不要为了使用模式而使用模式。简单的需求如果直接编码就能清晰明了,强行套用模式反而会让代码变得复杂难懂。模式是为了应对变化和复杂性而生的。
  4. 组合使用:在实际系统中,通常会是多种设计模式组合使用,共同构建一个灵活、可维护的架构。

希望这份详细的说明能帮助你建立起设计模式与OOP思想之间的清晰联系。理解和掌握这些模式的最佳方式就是在实践中不断思考和运用。

posted @ 2025-11-11 15:22  哈罗·沃德  阅读(0)  评论(0)    收藏  举报