C++创建型设计模式体现出的面向对象设计原则

C++创建型设计模式(如单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式)在实现过程中体现了许多软件设计原则,尤其是SOLID原则和KISS原则。这些模式的设计和应用有助于编写灵活、可维护和可扩展的代码。以下是每个模式如何体现这些原则的详细阐述:

1. 单例模式(Singleton Pattern)

体现的原则

  • 单一职责原则(SRP):单例模式确保一个类只有一个实例,并提供一个全局访问点。这使得类的职责非常明确,即仅负责管理自己的唯一实例。
  • 开闭原则(OCP):单例模式本身非常简单且闭合,不需要扩展。如果需要扩展,可以通过组合或继承来实现。

理由

  • 单例模式的目的是保证全局唯一性,这使得它不会因为类的职责过多而导致代码复杂化。
  • 由于单例模式的职责单一,新增功能时不会影响现有代码,符合开闭原则。

2. 工厂方法模式(Factory Method Pattern)

体现的原则

  • 单一职责原则(SRP):工厂方法模式将对象的创建逻辑从主逻辑中分离出来,每个工厂仅负责创建一种类型的对象。
  • 开闭原则(OCP):通过工厂方法模式,可以在不修改现有代码的情况下,通过派生新的工厂类来创建新的对象类型。
  • 依赖倒置原则(DIP):客户端依赖于抽象工厂和抽象产品,而不是具体实现,这符合依赖倒置原则。

理由

  • 分离创建逻辑和使用逻辑,使得每个类的职责更加明确。
  • 新增产品类型时,只需添加新的工厂类,而不需要修改现有代码,符合开闭原则。
  • 通过依赖抽象而不是具体实现,降低了代码之间的耦合度。

3. 抽象工厂模式(Abstract Factory Pattern)

体现的原则

  • 单一职责原则(SRP):抽象工厂模式将一组相关对象的创建逻辑分离出来,使得每个工厂仅负责创建一组相关对象。
  • 开闭原则(OCP):扩展新的产品族时,只需添加新的工厂类,而不需要修改现有代码。
  • 依赖倒置原则(DIP):客户端依赖于抽象工厂和抽象产品接口,而不是具体实现。

理由

  • 每个工厂仅负责一组相关对象的创建,职责单一。
  • 新增产品族时,只需添加新的工厂类,符合开闭原则。
  • 通过依赖抽象而不是具体实现,降低了代码之间的耦合度。

4. 建造者模式(Builder Pattern)

体现的原则

  • 单一职责原则(SRP):建造者模式将复杂对象的构造过程分离出来,每个建造者仅负责对象的一个部分的构建。
  • 开闭原则(OCP):通过不同的建造者,可以在不修改现有代码的情况下,创建具有不同表示的对象。
  • 接口隔离原则(ISP):建造者模式通过抽象接口定义构建步骤,使得客户端不需要了解复杂的构建逻辑。

理由

  • 将复杂对象的构建过程分解为多个步骤,每个步骤由专门的建造者负责,符合单一职责原则。
  • 新增建造者时,只需实现新的建造者类,而不需要修改现有代码,符合开闭原则。
  • 客户端通过抽象建造者接口与建造者交互,不需要了解具体构建细节,符合接口隔离原则。

5. 原型模式(Prototype Pattern)

体现的原则

  • 单一职责原则(SRP):原型模式将对象的克隆逻辑封装在一个单独的类中,使得类的职责更加明确。
  • 开闭原则(OCP):通过原型模式,可以在不修改现有代码的情况下,通过克隆已有对象来创建新对象。
  • 接口隔离原则(ISP):通过抽象接口定义克隆方法,使得客户端不需要了解复杂的克隆逻辑。

理由

  • 原型模式将克隆逻辑与对象的其他逻辑分离,使得类的职责更加明确。
  • 新增克隆逻辑时,只需实现新的原型类,而不需要修改现有代码,符合开闭原则。
  • 客户端通过抽象原型接口与原型对象交互,不需要了解具体克隆细节,符合接口隔离原则。

6. KISS原则(Keep It Simple, Stupid)

体现的原则

  • 简单性:尽管创建型设计模式在某些情况下可能看起来有些复杂,但它们的目的在于将复杂性分解为多个简单的部分,并通过抽象和封装来简化代码的使用和维护。

理由

  • 通过将复杂的对象创建过程分解为多个简单的部分,每个部分负责单一任务,从而使得整体代码更加简单易懂。
  • 抽象接口和工厂类的设计使得客户端代码更加简洁,不需要了解复杂的创建细节。

总结

C++创建型设计模式在实现过程中充分体现了SOLID原则和KISS原则。它们通过分离复杂性、封装创建逻辑、定义清晰的接口和依赖抽象,使得代码更加灵活、可维护和可扩展。这些原则的应用不仅使得代码更易于理解和维护,还有助于应对未来的变化和扩展需求。

相关推荐
言、雲3 分钟前
从tryLock()源码来出发,解析Redisson的重试机制和看门狗机制
java·开发语言·数据库
东风吹柳22 分钟前
观察者模式(sigslot in C++)
c++·观察者模式·信号槽·sigslot
A懿轩A31 分钟前
C/C++ 数据结构与算法【栈和队列】 栈+队列详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·栈和队列
汪洪墩33 分钟前
【Mars3d】设置backgroundImage、map.scene.skyBox、backgroundImage来回切换
开发语言·javascript·python·ecmascript·webgl·cesium
云空38 分钟前
《QT 5.14.1 搭建 opencv 环境全攻略》
开发语言·qt·opencv
Anna。。40 分钟前
Java入门2-idea 第五章:IO流(java.io包中)
java·开发语言·intellij-idea
思忖小下42 分钟前
梳理你的思路(从OOP到架构设计)_简介设计模式
设计模式·架构·eit
我曾经是个程序员1 小时前
鸿蒙学习记录
开发语言·前端·javascript
爱上语文1 小时前
宠物管理系统:Dao层
java·开发语言·宠物
大胆飞猪2 小时前
C++9--前置++和后置++重载,const,日期类的实现(对前几篇知识点的应用)
c++