设计模式C++学习笔记之二十(完结篇 & 面向对象原则)设计模式C++实例下载
Prototype(原型模式)
20.1.解释
概念:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
main(),客户
ICloneableNow,只有一个接口Clone
CMail,实体类
CAdvTemplate,
说明:通过克隆的方式很快速的得到一个新的对象,然后稍微修改就是一个全新的对象了,节省了重新创建对象对资源的大量占用。
Mediator(中介者模式)
21.1.解释
概念:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
main(),客户
IAbstractMediator,中介者接口
CMediatorNow,中介者实现类
IAbstractColleague,接口
CPurchase,需要协作的类之一
CSale,需要协作的类之二
CStock,需要协作的类之三
说明:CMediatorNow来组织IAbstractColleague接口的相互调用关系,客户main()直接访问CMediatorNow的接口进行业务处理。CMediatorNow很好的封装了业务,实现了高内聚。
Interpreter(解释器模式)
22.1.解释
概念:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
最简单的例子是表达式运算。
Flyweight(亨元模式)
23.1.解释
概念:运用共享技术有效地支持大量细粒度的对象。
Memento(备忘录模式)
24.1.解释
概念:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
Memento(备忘录)模式在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
面向对象设计原则
25.1.SRP(单一职责原则)
Single Responsibility Priciple
有且只有一个原因引起类的变更。
There should never be more than one reason for a class to change.
25.2.LSP(里氏替换原则)
Liskov Substitution Priciple
子类必须完全实现父类接口,在系统中完全可以用子类替换父类,即子类型必须能够替换它们的基类型。
25.3.DIP(依赖倒转原则)
Dependency Inversion Priciple
1. 高层模块不应该依赖于低层模块,二者都应该依赖于抽象。
2. 抽象不应该依赖于实现细节,实现细节应该依赖于抽象。
25.4.ISP(接口隔离原则)
Interface Segregation Priciple
不能强迫用户去依赖那些他们不使用的接口。
Clients should not be forced to depend upon interfaces that they do not use.
说明:接口的设计应该遵循最小接口原则,不要把用户不使用的方法塞进同一个接口里。使用多个专门的接口比使用单一的总接口总要好。
25.5.LOD(迪米特原则)
Low of Demeter Priciple
只和朋友类交流,出现在成员变量,函数输入输出参数中的类,是朋友类。强调类之间的松散耦合。
25.6.OCP(开放-封闭原则)
Open Close Principle
对扩展开放,对修改封闭。
_
附:设计模式C++代码VS解决方案,https://files.cnblogs.com/wanggary/SolutionPattern.zip
相关文章
- 从四个问题透析Linux下C++编译&链接
- C++ 的常量引用机制 const T& 与函数式编程
- 剑指Offer系列(C++版,详细解析) 03. 数组中重复的数字
- c++笔记3
- C++刷题的一些小tips
- 高校学生学籍系统C++&mysql
- Eclipse c++头文件问题(未完)
- C++——static & const
- 【编程实践】第三章 C++函数式编程 《C++程序设计语言》 / By 禅与计算机程序设计艺术&ChatGPT
- (map&C++)(六、取消和替换sort排序)
- (map&C++)(五、排序)sort
- (map&C++)(四、删除)erase与clear
- (vector&C++)(五、其他)
- (string&C++)(四、替换)replace的使用
- (string&C++)(二、删除)erase的使用
- VC++/MFC学习笔记(二)
- Linux hanlp JVM 部署及libstdc++.so.6部署小技巧
- Google C++ style guide——命名约定
- C++解决error C4996报错
- 【足迹C++primer】35、特定容器算法
- C++11 并发指南三(std::mutex 详解)
- C++中如何强制inline函数(MSVC, GCC)
- 入门教程:C++中的const限定修饰符
- 使用 SpiderMonkey 使 C++应用支持 JavaScript 脚本引擎
- msgpack[C++]使用笔记 和 msgpack/cPickle性能对比
- Linux Eclipse代码提示功能设置(Java & C/C++)
- c++ 的 open cv 人脸检测代码
- 20.C++- "&&","||"逻辑重载操作符的缺陷、","逗号重载操作符的分析
- 2019-11-29-如何入门-C++-AMP-教程
- C++ 类 & 对象
- C++:对象和类