黑马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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/276657.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

对于未来的一点思考

最近在思考一个问题&#xff1a;以后的发展路线。   自己算是走上了IT的道路&#xff0c;但现在也只是在程序员阶段&#xff0c;当然还未毕业&#xff0c;以后的路还很长&#xff0c;但是这个问题确是现在或以后不得不面对的一个问题。  上学期未那两个月&#xff0c;去了N…

深入解析react关于事件绑定this的四种方式

这篇文章主要介绍了详解react关于事件绑定this的四种方式&#xff0c;写的十分的全面细致&#xff0c;具有一定的参考价值&#xff0c;对此有需要的朋友可以参考学习下。如有不足之处&#xff0c;欢迎批评指正。 在react组件中&#xff0c;每个方法的上下文都会指向该组件的实例…

Apache的认证、授权、访问控制

原文链接&#xff1a; http://man.chinaunix.net/newsoft/Apache2.2_chinese_manual/howto/auth.html Apache认证、授权、访问控制 认证(Authentication)是指任何识别用户身份的过程。授权(Authorization)是允许特定用户访问特定区域或信息的过程。 相关模块和指令 认证和授权…

黑马C++设计模式2

简单工厂模式 //一般来说&#xff0c;自己创建一个对象的方法是在自己写的业务函数中直接new一个对象出来//但是现实需求&#xff0c;我不想创建对象&#xff0c;我只想拿来用。&#xff08;创建类的步骤比较复杂&#xff09; //好处&#xff0c;1、客户端和具体实现类解耦。2…

[转]Struts 2.1发布

作者 Ian Roughley译者 崔康 发布于 2009年2月4日 上午8时13分 Struts2框架刚刚发布最新2.1版。该版本做了重大升级&#xff0c;包括重构更多代码到插件框架、通过增加convention插件减少XML配置和改进REST支持。 我采访了Musachy Barroso——该版本的一位开发人员&#xff0c…

dim private public static_PHP中const,static,public,private,protected的区别

const: 定义常量&#xff0c;一般定义后不可改变static: 静态&#xff0c;类名可以访问public: 表示全局&#xff0c;类内部外部子类都可以访问&#xff1b;private: 表示私有的&#xff0c;只有本类内部可以使用&#xff1b;protected: 表示受保护的&#xff0c;只有本类或子类…

C#图解教程 第六章 深入理解类

深入理解类 类成员 前两章阐述了9种类成员中的两种&#xff1a;字段和方法。本章将会介绍除事件(第14章)和运算符外的其他类成员&#xff0c;并讨论其特征。 成员修饰符的顺序 字段和方法的声明可以包括许多如public、private这样的修饰符。本章还会讨论许多其他修饰符。多个修…

Apache用户身份验证

原文链接&#xff1a;http://www.yylog.org/?p4830 Apache用户身份验证 在apache应用过程中&#xff0c;管理员经常需要对apache下的目录做一些限制&#xff0c;不希望所有用户都能访问该目录下的文件&#xff0c;只对指定用户访问&#xff0c;此时我们就要用到apache用户身…

携程elong相继牵手支付宝转“危”为“机”

新华网浙江频道1月16日电 自电子机票全面普及以来&#xff0c;航空公司机票直销的力度不断加强正给传统的机票代理甚至在线旅游平台带来了极大的生存压力。 而面对危机&#xff0c;在进一步丰富自身产品服务之外&#xff0c;大的在线旅行平台也终于找到对策。继eLong此前与支付…

c# 获取word表格中的内容_Java 获取、删除Word文本框中的表格

本文介绍如何来获取Word文本框中包含的表格&#xff0c;以及删除表格。程序测试环境包括&#xff1a;IDEAJDK 1.8.0Spire.Doc.jar注&#xff1a;jar导入&#xff0c;可通过创建Maven程序项目&#xff0c;并在pom.xml中配置Maven仓库路径&#xff0c;并指定Free Spire.Doc for J…

Array.prototype.reduce 的理解与实现

Array.prototype.reduce 是 JavaScript 中比较实用的一个函数&#xff0c;但是很多人都没有使用过它&#xff0c;因为 reduce 能做的事情其实 forEach 或者 map 函数也能做&#xff0c;而且比 reduce 好理解。但是 reduce 函数还是值得去了解的。 reduce 函数可以对一个数组进行…

PS抠图方法[photoshop中文教程]

PS抠图方法 一、魔术棒法——最直观的方法   适用范围&#xff1a;图像和背景色色差明显&#xff0c;背景色单一&#xff0c;图像边界清晰。   方法意图&#xff1a;通过删除背景色来获取图像。   方法缺陷&#xff1a;对散乱的毛发没有用。   使用方法&#xff1a…

我的核心技术都是从哪里学到的?如何提高成长的?分享给大家。

1997年&#xff0c;我在读黑龙江大学读大二时&#xff0c;我认识了一个内蒙古大学计算机专业毕业的一个高材生&#xff0c;那时我那朋友引导了我很多&#xff0c;他那时候在我们家那边开一个IT公司&#xff0c;他知道如何靠IT技术赚钱&#xff0c;如何靠程序等赚钱&#xff0c;…

python线性回归算法简介_Python实现的简单线性回归算法实例分析

本文实例讲述了Python实现的简单线性回归算法。分享给大家供大家参考&#xff0c;具体如下&#xff1a; 用python实现R的线性模型(lm)中一元线性回归的简单方法&#xff0c;使用R的women示例数据&#xff0c;R的运行结果&#xff1a; > summary(fit) Call: lm(formula weig…

Object/Relation Mapping 对象关系映射

对象-关系映射&#xff08;Object/Relation Mapping&#xff0c;简称ORM&#xff09;&#xff0c;是随着面向对象的软件开发方法发展而产生的。面向对象的开发方法是当今企业级应用开发环境中的主流开发方法&#xff0c;关系数据库是企业级应用环境中永久存放数据的主流数据存储…

FastReport使用方法(C/S版)

前言 这两天群里一直有群友问一些关于FastReport的问题&#xff0c;结合他们的问题&#xff0c;在这里做一个整理&#xff0c;有不明白的可以加 FastReport 交流群 群 号&#xff1a;554714044 工具 VS2017 FastReport 开始 1.新建项目&#xff0c;添加三个按钮。预览、设计、…

如何设置Linux时区为东八区

当我们购买美国VPS或服务器的时候&#xff0c;默认情况下是美国时间。对于我们定时执行某些任务会带来麻烦&#xff0c;所以需要设置时区为东八区。登录SSH后&#xff0c;执行tzselect命令。我们这里选择亚洲5.这里选择china 9。一般选东八区&#xff08;北京&#xff0c;广东&…

python删除两个excel表中的相同元素_python筛选出两个文件中重复行的方法

查找A文件中&#xff0c;与B文件中内容不重复的内容#!usr/bin/python import sys import os字符串查找函数&#xff0c;使用二分查找法在列表中进行查询def binarySearch(value, lines): right len(lines) - 1 left 0 a value.strip() while left < right: middle int((…

求解:nhibernate2.0操作oralce提交事务时报错

代码如下: Configuration config new Configuration(); config.AddAssembly("TestCleanSnow"); ISessionFactory factory config.BuildSessionFactory(); ISession session f…

python画枫叶_python-文件的操作

一、异常 程序在运行的过程中&#xff0c;不可避免出现一些错误&#xff0c;这些错误成为异常 异常以后的代码都不会被执行 try 语句 代码块&#xff08;可能出现错误的语句&#xff09; except 异常类型 as 异常名: 代码块(出错以后执行的语句&#xff09; except 异常类型 as…