C++设计模式面向对象设计模式

Posted Booksort

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++设计模式面向对象设计模式相关的知识,希望对你有一定的参考价值。

目录

面向对象设计模式理解

面向对象的思维模式

抽象思维层面理解面向对象

面向对象的接口

面向对象设计原则

一.依赖倒置原则(DIP)

二.开放封闭原则(OCP)

三.单一职责原则(SRP)

四.Liskov替换原则(LSP)

五.接口隔离原则(ISP)

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

七,封装变化点

八.针对接口编程而不针对实现编程


面向对象设计模式理解

C++作为一门面向对象语言(OOP),面向对象的三大特性是:封装、继承、多态

这三个特性是是面向对象的底层模式,这里介绍的主要是面向对象的设计模式。

面向对象设计模式的关键需求就是:复用

和面向过程不同,面向对象最表面的理解就是把所有程序分解、划分从一个个对象来使用。

但是更为重要的是面向对象的思维模式

面向对象的思维模式

底层思维: 向下,把握机器底层从微观理解对象构造

  • 语言构造
  • 编译转换
  • 内存模型
  • 运行时机制

抽象思维:向上,将我们周围的世界抽象为代码逻辑

  • 面向对象
  • 组件封装
  • 设计模式
  • 架构模式

由于需求的不断变化会造成代码逻辑复用的困难性

抽象思维层面理解面向对象

  • 隔离变化 :利用多态和继承达到复用效果
  • 功能上各司其职:各个类的功能和实现高度内聚,不会因为需求的增加、删除而导致类的功能和实现发生变化

关于多态和继承的介绍请看

C++认知继承_Booksort的博客-CSDN博客

C++多态知识点深入了解_Booksort的博客-CSDN博客

面向对象的接口

在面向对象的系统种,接口是基本组成部分。对象只有通过它们的接口才能与外部交流,如果不通过对象的接口就无法知道对象的任何事情,也无法请求对象做任何事情。

对象接口与其功能实现是分离的,不同对象可以请求做不同的实现,两个具有相同接口的对象可以有完全不同的实现。

面向对象设计原则

一.依赖倒置原则(DIP)

1.高层模块的稳定性不应该依赖低层模块的变化,二者都因该依赖于抽象的稳定

           当一个UI类要依赖于(继承)其中元件的实现的类时,这个是不稳定的,当增加一个元件或者修改一个元件的实现方式,就会造成UI类的变化,是非常不稳定的设计,UI类与那些元件类都应该依赖于一个稳定的抽象类,利用多态的方式去实现元件的展示

2.抽象的稳定性不应该依赖于实现的细节,实现的细节会变化,实现的细节应该依赖于抽线的稳定

           抽象类中不能去调用一个子类的对象,子类对象发生变换后,抽象的类就会发生变化,抽象类应该具有稳定性

二.开放封闭原则(OCP)

  • 对拓展是开放的,对更改封闭

一个类想要增加该类的功能是允许的,但是想要修改本身就存在的功能是不允许的

  • 类模块是可拓展的,但是不可修改

三.单一职责原则(SRP)

  • 一个类应该就有一个引起他变化的原因
  • 变化的方向隐含着类的责任

在项目中,一个类应该就有一种职责,即一种功能,就是说类的成员函数应该都是为了实现一种功能,而不是说一个类种有横夺成员函数,可以实现各种不同方向上的功能

四.Liskov替换原则(LSP)

  • 子类必须能够替换他们的基类(IS-A关系)

所有需要父类的地方,子类都能够传过去进行替换。防止子类中调用父类的方法时,就直接报错/抛异常(防止子类无法调用父类的方法)

五.接口隔离原则(ISP)

  • 不应该强迫客户程序去依赖他们不用的方法

不要把不必要、客户不会使用的方法提供出去,如果用户使用了,但是后期被修改了,那么客户抽象也要修改

  • 接口应该小而完备

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

  • 类继承允许你根据其他类的实现来定义一个类的实现,生成子类的复用->白箱复用(父类内部细节对子类可见)
  • 对象组合:新的复杂的功能可以通过组装其他对象来获得。对象组合要求被组合的对象具有良好定义的接口-黑箱复用(对象内部细节不可见)
  • 继承在某种程度上破坏的了封装,子类父类耦合度高,子类方法修改后,父类方法可能会需要大改

七,封装变化点

  • 使用封装来实现对象之间的分界层,这允许修改一侧的实现而不会引起另一侧的不良影响,达到层次间的松耦合

八.针对接口编程而不针对实现编程

  • 客户程序仅需要知道接口的定义即可,不需要知道内部实现的细节

以上是关于C++设计模式面向对象设计模式的主要内容,如果未能解决你的问题,请参考以下文章

c++面向对象的程序设计

面向对象程序设计C++

面向对象程序设计C++

面向对象程序设计C++

[GeekBand] 面向对象的设计模式(C++)

8面向对象设计模式六大原则总结