C++设计模式:设计原则1

# 本人学习时的笔记,有错必改,不喜勿喷 #

(接上一篇C++设计模式:设计原则0)

5. 接口隔离 原则 Interface Segregation Principle,ISP
  • 不应该强迫客户程序依赖它们不用方法即接口设计应该精简,不应该强迫客户程序实现它们不需要的接口方法。一个类应该只依赖于它需要的接口,而不应该依赖于它不需要的接口。
  • 接口应该完备即接口应该设计得尽可能小,只包含客户程序需要的方法,而且这些方法应该是相关的,彼此之间的关系应该紧密。这样可以提高接口的内聚性,降低客户程序的耦合度。

举例比如一个动物园管理系统主要飞禽走兽这两种类别动物肯定有不同行为因此我们应该定义飞禽基类IBird以及走兽基类IBeast各自实现具体方法而不是设计一个包含所有动物行为接口

总结接口隔离主要为了避免一个基类太过于通用导致接口混乱情况开发我们应该注意每个都有各自特点

6. 优先使用对象组合,而不是类继承

  • 类继承通常为“白箱复用”,对象组合通常为“黑箱复用”。
    • 类继承的“白箱复用”:当一个类继承另一个类时,它会继承其父类的接口和实现细节,这就意味着子类可以直接访问父类的内部数据和方法。这样的复用被称为“白箱复用”,因为子类可以直接看到父类的实现细节,从而可能导致对父类实现的依赖,增加了耦合度。
    • 对象组合的“黑箱复用”:对象组合是通过将一个类的对象嵌入到另一个类中来实现复用。被组合的对象通常被视为“黑箱”,因为外部类不需要了解被组合对象的内部实现细节,只需通过定义的接口与其交互。这种方式降低了类之间的耦合度,提高了系统的灵活性和可维护性。
  • 继承在某种程度上破坏了封装性,子类父类耦合度高。而对象组合则只要求被组合的对象具有良好定义的接口,耦合度低。

上例很明显Duck只是fly这个行为因为应该与FlyBehavior类组合而不是继承

总结如果我们ba所有行为以及数据应用继承如果b只是a行为应用组合

7. 封装变化点

使用封装创建对象之间分界层设计者可以一侧进行修改而不会另一侧产生不良影响从而实现层次松耦合

封装变化点包括以下几个方面:

  • 识别变化点: 首先,需要识别系统中可能发生变化的地方,这些地方就是变化点。例如,可能会发生变化的地方包括业务逻辑、数据持久化、用户界面等。
  • 封装变化: 一旦识别了变化点,就可以通过封装来创建分界层,将可能发生变化的部分与稳定的部分隔离开来。这样,当变化发生时,只需修改分界层的一侧,而不会对其他部分产生影响。
  • 保持稳定: 封装变化点后,需要确保分界层的另一侧保持稳定。这意味着分界层的一侧应该尽量减少对另一侧的依赖,从而使得变化局限在分界层的一侧。

举例假设有一个电商系统,其中包括订单处理模块和支付模块。订单处理模块负责处理订单,而支付模块负责处理支付操作。为了实现封装变化点,可以创建一个支付接口作为分界层,订单处理模块通过该接口与支付模块进行交互。这样,当支付方式发生变化时,只需修改支付模块的实现,而不会影响订单处理模块。

在这个例子中,Payment接口作为分界层,将订单处理模块和具体的支付实现(如信用卡支付)隔离开来。这样,当支付方式发生变化时,只需修改具体的支付实现,而不会影响订单处理模块。

总结封装变化点主要针对的是交互的两端都是变化点,这时可以引入一个中间人这个中间人负责两头部分但是这个中间人本身不变这样就能实现交互两端都是独立变化

8. 针对接口编程而不是针对实现编程

  • 变量类型声明某个特定具体类而是声明某个接口
  • 客户程序无需获知对象具体类型需要知道对象具有接口
  • 减少系统各部分依赖关系从而实现高内聚低耦合类型设计方案

举例假设有一个图形绘制程序,程序需要绘制不同类型图形比如CircleRectangle这时可以定义一个基类Shape这个Shape抽象方法draw客户端代码只关注接口draw即可无需理会传入具体是什么

class Shape {

public:

    virtual void draw() const = 0;

};

class Circle : public Shape{ ... }

class Rectangle : public Shape { ... }

// 客户端代码

void drawShape(const Shape& shape) {

    shape.draw();

}

int main() {

    Circle circle;

    Rectangle rectangle;

    drawShape(circle); // 客户端代码只关注接口

    drawShape(rectangle); // 客户端代码只关注接口

    return 0;

}

总结设计程序之前我们需要时刻注意客户端程序只关注接口方面具体实现交给逻辑层这样提高系统灵活可扩展以及可维护性

  • 14
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: c新经典:设计模式pdf是一本介绍设计模式的经典书籍,它的中文名为《设计模式:可复用面向对象软件的基础》。该书由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides等四位作者合作撰写,被誉为设计模式领域的圣经。 该书内容主要分为三个部分:设计模式概述、23种设计模式详解和设计模式的演化与评价。 在设计模式概述部分,作者详细介绍了设计模式的概念、用途以及学习设计模式的重要性。他们解释了设计模式是如何帮助开发人员在面对常见问题时提供可复用的解决方案的。 接下来,书中着重介绍了23种常用的设计模式,这些模式分为创建型模式、结构型模式和行为型模式。每种模式都包括了详细的示意图、代码示例以及相关的背景知识和适用场景。读者通过学习这些模式可以更好地理解软件设计中的常见问题,并学会应用相应的模式解决这些问题。 最后,作者还回顾了设计模式的演化历程,并针对设计模式的应用进行了评价。他们讨论了设计模式在不同的项目中的适用性和局限性,并提出了一些关于如何正确应用设计模式的建议。 总的来说,c新经典:设计模式pdf是一本关于设计模式的重要参考书籍。它系统地介绍了常见的设计模式,并教授读者如何应用这些模式解决软件设计中的实际问题。无论是初学者还是有一定经验的开发人员,都可以从中获得宝贵的指导和启发。 ### 回答2: 《新经典:设计模式pdf》是一本介绍设计模式的经典书籍,该书的作者是C。设计模式是软件开发中常用的解决问题的方法,它提供了一套被广泛认可和应用的设计方案。这本书主要介绍了23种常用的设计模式,分为创建型、结构型和行为型三种类型。 在书中,C提供了详细的代码示例和解释,让读者能够理解如何使用不同的设计模式来解决实际问题。此外,他还从理论和实践的角度详细阐述了设计模式的原理和应用。 这本书的特点之一是它包含了丰富的实例和案例分析,这有助于读者更好地理解设计模式的实际应用。C通过这些案例展示了如何在软件开发过程中使用设计模式来提高代码的复用性、可维护性和可扩展性。 此外,《新经典:设计模式pdf》还提供了系统而全面的设计模式分类和比较,使读者能够更好地理解不同设计模式之间的区别和适用场景。这对于读者深入学习和应用设计模式非常有帮助。 总之,《新经典:设计模式pdf》是一本值得阅读的设计模式经典著作。它提供了丰富的实例和详细的解释,有助于读者掌握设计模式的原理与应用。无论是初学者还是有经验的开发人员,都可以从这本书中获得实用且有价值的知识。 ### 回答3: 设计模式是软件开发领域中的一种最佳实践,它是通过总结和抽象各种实际问题中的共同解决方案,形成一套可以在特定情境中重复使用的模式。《新经典:设计模式pdf》是一本与设计模式相关的电子书,可以为开发者提供深入了解和学习设计模式的资料。 在《新经典:设计模式pdf》这本电子书中,作者可能会介绍和解释一些经典的设计模式,如单例模式、观察者模式、工厂模式等。这些模式都是在实际开发中经常遇到的问题和解决方案,通过学习这些模式,开发者可以更好地应对这些问题,提高软件的可维护性和扩展性。 这本电子书可能会使用具体的案例和代码示例来说明每种设计模式的实现方式和应用场景。通过这种方式,读者可以更好地理解每个模式的概念和使用方法,并且能够将其应用到自己的开发项目中。 除了介绍和讲解设计模式的基本概念和应用,这本电子书可能还会探讨一些设计模式的进阶话题,如面向对象设计原则模式的组合和演化等。这些内容可以帮助读者在实际开发中更加灵活地运用设计模式,并且能够根据具体需求进行模式的选择和调整。 总之,《新经典:设计模式pdf》是一本能够帮助开发者理解和应用设计模式的电子书。通过学习这本书,读者可以提升自己的软件开发能力,写出更加可靠和可复用的代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值