C++设计模式面向对象设计模式
Posted Booksort
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++设计模式面向对象设计模式相关的知识,希望对你有一定的参考价值。
目录
面向对象设计模式理解
C++作为一门面向对象语言(OOP),面向对象的三大特性是:封装、继承、多态
这三个特性是是面向对象的底层模式,这里介绍的主要是面向对象的设计模式。
面向对象设计模式的关键需求就是:复用
和面向过程不同,面向对象最表面的理解就是把所有程序分解、划分从一个个对象来使用。
但是更为重要的是面向对象的思维模式
面向对象的思维模式
底层思维: 向下,把握机器底层从微观理解对象构造
- 语言构造
- 编译转换
- 内存模型
- 运行时机制
抽象思维:向上,将我们周围的世界抽象为代码逻辑
- 面向对象
- 组件封装
- 设计模式
- 架构模式
由于需求的不断变化会造成代码逻辑复用的困难性
抽象思维层面理解面向对象
- 隔离变化 :利用多态和继承达到复用效果
- 功能上各司其职:各个类的功能和实现高度内聚,不会因为需求的增加、删除而导致类的功能和实现发生变化
关于多态和继承的介绍请看
C++多态知识点深入了解_Booksort的博客-CSDN博客
面向对象的接口
在面向对象的系统种,接口是基本组成部分。对象只有通过它们的接口才能与外部交流,如果不通过对象的接口就无法知道对象的任何事情,也无法请求对象做任何事情。
对象接口与其功能实现是分离的,不同对象可以请求做不同的实现,两个具有相同接口的对象可以有完全不同的实现。
面向对象设计原则
一.依赖倒置原则(DIP)
1.高层模块的稳定性不应该依赖低层模块的变化,二者都因该依赖于抽象的稳定
当一个UI类要依赖于(继承)其中元件的实现的类时,这个是不稳定的,当增加一个元件或者修改一个元件的实现方式,就会造成UI类的变化,是非常不稳定的设计,UI类与那些元件类都应该依赖于一个稳定的抽象类,利用多态的方式去实现元件的展示
2.抽象的稳定性不应该依赖于实现的细节,实现的细节会变化,实现的细节应该依赖于抽线的稳定
抽象类中不能去调用一个子类的对象,子类对象发生变换后,抽象的类就会发生变化,抽象类应该具有稳定性
二.开放封闭原则(OCP)
- 对拓展是开放的,对更改封闭
一个类想要增加该类的功能是允许的,但是想要修改本身就存在的功能是不允许的
- 类模块是可拓展的,但是不可修改
三.单一职责原则(SRP)
- 一个类应该就有一个引起他变化的原因
- 变化的方向隐含着类的责任
在项目中,一个类应该就有一种职责,即一种功能,就是说类的成员函数应该都是为了实现一种功能,而不是说一个类种有横夺成员函数,可以实现各种不同方向上的功能
四.Liskov替换原则(LSP)
- 子类必须能够替换他们的基类(IS-A关系)
所有需要父类的地方,子类都能够传过去进行替换。防止子类中调用父类的方法时,就直接报错/抛异常(防止子类无法调用父类的方法)
五.接口隔离原则(ISP)
- 不应该强迫客户程序去依赖他们不用的方法
不要把不必要、客户不会使用的方法提供出去,如果用户使用了,但是后期被修改了,那么客户抽象也要修改
- 接口应该小而完备
六.优先使用对象组合,而不是类继承
- 类继承允许你根据其他类的实现来定义一个类的实现,生成子类的复用->白箱复用(父类内部细节对子类可见)
- 对象组合:新的复杂的功能可以通过组装其他对象来获得。对象组合要求被组合的对象具有良好定义的接口-黑箱复用(对象内部细节不可见)
- 继承在某种程度上破坏的了封装,子类父类耦合度高,子类方法修改后,父类方法可能会需要大改
七,封装变化点
- 使用封装来实现对象之间的分界层,这允许修改一侧的实现而不会引起另一侧的不良影响,达到层次间的松耦合
八.针对接口编程而不针对实现编程
- 客户程序仅需要知道接口的定义即可,不需要知道内部实现的细节
以上是关于C++设计模式面向对象设计模式的主要内容,如果未能解决你的问题,请参考以下文章