设计模式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解决方案,http://files.cnblogs.com/wanggary/SolutionPattern.zip
设计模式C++学习笔记之二十(完结篇 & 面向对象原则)设计模式C++实例下载的更多相关文章
- python学习笔记(二十)初识面向对象
面向对象的编程的主要思想是把构成问题的各个事物分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述一个事物在解决问题的过程中经历的步骤和行为.对象作为程序的基本单位,将程序和数据封装其中, ...
- 【Java学习笔记之二十六】深入理解Java匿名内部类
在[Java学习笔记之二十五]初步认知Java内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意 ...
- Dynamic CRM 2013学习笔记(二十八)用JS动态设置字段的change事件、必填、禁用以及可见
我们知道通过界面设置字段的change事件,是否是必填,是否可见非常容易.但有时我们需要动态地根据某些条件来设置,这时有需要通过js来动态地控制了. 下面分别介绍如何用js来动态设置. 一.动态设 ...
- Dynamic CRM 2013学习笔记(二十)字段改变事件的二种实现方法
CRM里有二种方式实现字段change事件,一种是在form里,一种完全通过js来实现.本文介绍下二者的用途及区别. 1. Form里用法 这种方式估计其实也是添加一个js的function. 这种方 ...
- Dynamic CRM 2013学习笔记(二十六)报表设计:Reporting Service报表 动态参数、参数多选全选、动态列、动态显示行字体颜色
上次介绍过CRM里开始报表的一些注意事项:Dynamic CRM 2013学习笔记(十五)报表入门.开发工具及注意事项,本文继续介绍报表里的一些动态效果:动态显示参数,参数是从数据库里查询出来的:参数 ...
- Dynamic CRM 2013学习笔记(二十九)报表设计:reporting service 报表开发常见问题
在报表开发过程中,经常会遇到各种各样的问题,比如The report cannot be displayed. (rsProcessingAborted),一点有意义的提示都没有:再就是分页问题,经常 ...
- 【转】 Pro Android学习笔记(二十):用户界面和控制(8):GridView和Spinner
目录(?)[-] GridView Spinner GridView GridView是网格状布局,如图所示.在了解ListView后,很容易了解GridView.下面是例子的XML文件. <? ...
- Android学习笔记(二十二)——短信接收与发送
//此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 当手机接收到一条短信的时候, 系统会发出一条值为 android.provider.Telephony.SMS ...
- Android学习笔记(二十)——自定义内容提供器
//此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 如果我们想要实现跨程序共享数据的功能,官方推荐的方式就是使用内容提供器,可以通过新建一个类去继承 Conten ...
随机推荐
- Java工具之上传文件
4个代码 1.前端JSP 2.自定义异常类 3.文件上传抽象类 4.Servlet 1.JSP <%@ page contentType="text/html;charset=UTF- ...
- springMVC的参数检验
先说应用场景,比如说前台传来一个参数,我们肯定得在后台判断一下,比如id不能为空了,电话号码不能少于11位了等等.如果在service层一个一个判断岂不是要累死个人.代码也不简洁,这时候我们肯定会想到 ...
- python实现双向链表
双向链表 一种更复杂的链表是“双向链表”或“双面链表”.每个节点有两个链接:一个指向前一个节点,当此节点为第一个节点时,指向空值:而另一个指向下一个节点,当此节点为最后一个节点时,指向空值. 实现 c ...
- Mac 键盘符号 及VSCode快捷键 说明
Mac 键盘符号说明 ⌘ == Command ⇧ == Shift ⇪ == Caps Lock ⌥ == Option ⌃ == Control ↩ == Return/Enter ⌫ == De ...
- adb.exe已停止工作
提示adb.exe错误,我电脑上没有安装豌豆荚,也没运行其它应用,最后发现是360杀毒软件导致的,进程中关掉360Mobile即可.
- 【PgSQL安装(含配置)】PostgreSQL简称PgSQL,是1980以加利福尼亚大学开发的DBMS,严格遵守标准SQL。
[下载地址]http://www.enterprisedb.com/products-services-training/pgdownload#windows …………………………………………………… ...
- js call使用
call 方法 请参阅 应用于:Function 对象 要求 版本 5.5 调用一个对象的一个方法,以另一个对象替换当前对象. call([thisObj[,arg1[, arg2[, [,.argN ...
- 拦截对该服务器所有的http请求
一:拦截对该服务器所有的http请求. 在config 中加, <system.webServer> <modules> <add name="HttpAuth ...
- 阮一峰:Flex 布局教程
http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html http://www.ruanyifeng.com/blog/2015/07/flex ...
- jupyter notebook出现cannot import name 'create_prompt_application'问题(Died Kernel)
应该是在安装其它python第三方库时更新了prompt-toolkit版本,降级到下面的版本即可: sudo pip install 'prompt-toolkit==1.0.15'