黑马C++设计模式1
设计模式的基础是:多态。
设计模式综览表:
单例模式:是保证一个类仅有一个实例,并提供一个访问它的全局访问点。
简单工厂模式:通过专门顶一个一个类来负责创建其它类的实例,被创建的实例通常都具有共同的父类。
工厂方法模式:定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。
抽象工厂模式:提供一个创建一系列相关或者相互依赖的接口,而无需指定他们具体的类。
适配器模式:将一个类的接口转换成客户希望的另外一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
装饰模式:动态地给一个对象添加一些额外的职责。就增加功能来说,此模式比生成子类更为灵活。
外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口是的这一子系统更加容易使用。
代理模式:为其他对象提供一种代理以控制对这个对象的访问。
命令模式:将一个请求封装为一个对象,从而使你可用不同的请求对客户端进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于他的对象都得到通知并被自动更新。
策略模式:准备一组算法,并将每一个算法封装起来,是的它们可以互换。
模板方法模式:得子类可以不改变一个算法的结构即可重定义该算法得某些特定步骤。
面向对象设计原则
如何同时提高一个软件系统得可维护性和可复用性是面向对象设计需要解决的核心问题之一。
面向对象设计原则为支持可维护性复用而诞生,这些原则蕴含再很多设计模式种,它们是从许多设计方案中总结出的指导性原则。
原则的目的:高内聚,低耦合。(一个类或一个函数,只做一件事,其他事情不做。降低类与类之间的耦合关系)
1、单一职责原则,类的职责单一,对外只提供一种功能,而引起类变化的原因都应该只有一个。
2、开闭原则,类的改动是通过增加代码进行的,而不是修改源代码
3、里氏代换原则,任何抽象类出现的地方都可以用他的实现类进行替换,实际就是虚拟机制,语言级别实现面向对象功能。
4、依赖倒转原则,依赖于抽象(接口),不要依赖具体的实现,也就是针对接口编程。
5、接口隔离原则,不应该强迫用户的程序以来他们不需要的接口方法。一个接口应该只提供一种对外功能,不应该把所有操作都封装到一个接口中去。
6、合成复用原则,如果使用继承,会导致父类的任何变换都可能影响到子类的行为。如果使用对象组合,就降低了这种依赖关系。对于继承和组合,优先使用组合。
7、迪米特法则,一个对象应当对其他对象尽可能少的了解,从而降低各个对象之间的耦合,提高系统的可维护性。例如在一个程序中,各个模块之间相互调用时,通常会提供一个统一的接口来实现。这样其它模块不需要了解另外一个模块的内部实现细节,这样当一个模块内部发生改变时,不会影响其它模块的使用。(黑盒原理)
//开闭原则,对扩展开放,对修改关闭,增加功能时通过增加代码来实现,而不是去修改源代码 //写一个抽象类 class AbstractCaculator{ public:virtual int getResult() = 0; virtual void setOperatorNumber() = 0; };//写一个加法类 class PlusCaculator:public AbstractCaculator{ public:virtual void setOperatorNumber(int a, int b){this->mA = a;this->mB = b;}virtual int getResult() {return mA + mB;}int mA;int mB; }
//迪米特法则,又叫最少知识原则 class AbstractBuilding{ public:virtual void sale() = 0; };//楼盘A class BuildingA:public AbstractBuilding{ public:BuildingA(){mQulity = "高品质"; }virtual void sale(){cout << "楼盘A" <<mQulity << "被售卖" << endl;} public:string mQulity; };//楼盘B class BuildingB:public AbstractBuilding{ public:BuildingB(){mQulity = "堤品质"; }virtual void sale(){cout << "楼盘B" <<mQulity << "被售卖" << endl;} public:string mQulity; };//中介类 class Mediator{ public:Mediator(){AbstractBuilding * building = new BuildingA;vBuilding->push_back(building);building = new BuildingB;vBuilding.push_back(building);}~Mediator(){//...} public:vector<AbstractBuilding*> vBuilding;}
//合成复用原则,继承和组合优先使用组合 //针对具体类,不要使用继承class AbstractCar{ public:virtual void run() = 0; };//大众车 class VolkswagenCar:public AbstractCar{ public:virtual void run(){cout << "大众车启动。。。" <<endl;} };//宝马车 class BMWCar:public AbstractCar{ public:virtual void run(){cout << “宝马车启动” << endl;}};
转载于:https://www.cnblogs.com/Maurice-code/p/11605243.html
黑马C++设计模式1相关推荐
- 黑马C++设计模式2
简单工厂模式 //一般来说,自己创建一个对象的方法是在自己写的业务函数中直接new一个对象出来//但是现实需求,我不想创建对象,我只想拿来用.(创建类的步骤比较复杂) //好处,1.客户端和具体实现类 ...
- 设计模式 - 软件设计的七大原则
文章目录 前言 1. 软件设计模式原则 2. 开闭原则 1. 概念 2. 例子 3. 里氏替换原则 1. 概念 2. 例子 4. 依赖倒置原则 1. 概念 2. 代码 5. 单一职责原则 说明 6. ...
- 软件设计师提纲+复习资料整理(上午题)
文章目录 软件设计师考试大纲 上午题(选择题) 一.计算机组成原理 考点:CPU结构组成 考点:原码.反码.补码定点整数范围 考点:浮点数表示 考点:RISC和CISC计算机的区别 考点:奇校验与偶校 ...
- 【黑马程序员】23种设计模式——UML图
文章目录 前言 二.UML图 1)类图概述 2)类图的作用 3)类图表示法 1.类的表示方式 2.类与类之间关系的表示方式 2.1关联关系 ①单向关联 ②双向关联 ③自关联 2.2聚合关系 2.3组合 ...
- 黑马程序员,黑马论坛--------枚举和单例设计模式的区别
文章来源:黑马程序员,黑马论坛 枚举和单例设计模式的区别,黑马面试有的 public class Test11 { public static void main(String[] args) { ...
- 黑马程序员-JAVA基础-IO流中的装饰设计模式
------- android培训.java培训.期待与您交流!------- 装饰设计模式: 当想要对已有的对象进行功能增强时,可以定义类,将已有的对象传入,基于已有的功能,并提供加强功能.那么,自 ...
- 黑马程序员:java基础之装饰设计模式
一.什么是装饰设计模式 当想要对已有的对象进行功能增强时,可以定义类,将已有对象传入,基于已有的功能,并提供加强功能,那么自定义的类成为装饰类. 装饰类通常会通过构造方法,传递进来一个需要装饰的对象, ...
- 黑马程序员-面向对象-06天-5(单例设计模式)
package java06;/** 设计模式:解决某一类问题最行之有效的方法.* java中23种设计模式:* 单例设计模式:解决一个类在内存只存在一个对象.* 想要保证对象唯一.* 1,为了避免其 ...
- 黑马程序员------毕老师视频笔记第七天------面向对象(模板方法设计模式)
---------------------- ASP.Net+Unity开发..Net培训.期待与您交流! ---------------------- 模板方法设计模式:定义功能时,功能的一部分是确 ...
最新文章
- 如何扫描和修复 Linux 磁盘错误
- Shell中常用的引号
- 声网sdk android接入,Android 集成声网Agora 音视频实时通话(三)
- 助你成长为优秀的程序员 杰出的软件工程师、设计师、分析师和架构师
- Android本地视频播放器开发--视频解码
- 一个aov网用邻接矩阵表示_关注讲述我和朱婷7年7个故事,见证一个明星代表的诞生...
- matlab朴素贝叶斯工具箱,朴素贝叶斯分类matlab实现.doc
- 坚实原则:开放/封闭原则
- 【华为云技术分享】解密TaurusDB存储端高并发之线程池
- 吴裕雄 15-MySQL LIKE 子句
- 硬盘安装Windows 7
- win10常用的小技巧
- 四川计算机职称考试报名时间2015年,2015年四川省计算机职称考试各城市报名时间...
- (转)安装完Fedora 18后需要做的事情
- 深度deepin更新失败升级失败
- R语言 回归结果中有NA
- java-生产环境不重启 JVM,替换掉已经加载的类
- php跟踪系统调用,使用strace命令跟踪系统调用
- 计算机常用英语单词1500
- Maven Archetype使用教程与具体使用方法
热门文章
- java获取表主外键_通过 jdbc 分析数据库中的表结构和主键外键
- bootdefault和configuration_springboot常用注解、包引入和自动配置功能解读
- python 银行工作_Python:银行系统实战(一)
- 计算机nit题百度云,计算机NIT应用基础试题
- JDK 与 JRE区别
- ThreadPoolTaskExecutor和ThreadPoolExecutor区别
- 蜗杆参数法设计_齿轮几何尺寸设计,很实用的Excel表格(附自动计算表格)
- Spring系列(十三):AOP相关知识笔记
- 程序员进阶架构师路线
- 硬件:串口的基础知识笔记