设计模式
ApeLife
这个作者很懒,什么都没留下…
展开
-
C++设计模式之工厂方法(二)
#ifndef _BACKGROUND_STYLE_H_#define _BACKGROUND_STYLE_H_#include #include using namespace std;//背景风格抽象类class BackgroundStyle{public: //虚方法,显示背景风格 virtual void DisplayStyle() = 0;};//古典原创 2014-08-14 23:23:28 · 1308 阅读 · 0 评论 -
C++设计模式之状态模式(二)
2、智能空调的设计与实现某软件公司将开发一套智能空调系统: 系统检测到温度处于20---30度之间,则切换到常温状态;温度处于30---45度,则切换到制冷状态; 温度小于20度,则切换到制热状态。请使用状态模式对此系统进行设计。 从需求中可以看出,空调可以处于三种状态: 制热状态、常温状态、制冷状态。每种状态下都存在三种行为:保持常温、制冷、制热原创 2014-08-30 22:14:25 · 3145 阅读 · 1 评论 -
C++设计模式之抽象工厂模式(一)
伟创力(世界500强企业),公司有笔记本生产车间、电视机车间、空调车间、电话生产等车间,各生产车间各行其责,生产出不同类型的产品。伟创力不再是生产单一产品的企业,而是生产出多种不同类型的产品,各产品属于不同产品等级结构中。在设计模式中,也存在一种类似的模式,可以创建一系列产品,这些产品位于不同产品等级结构,产品之间可以没有任何联系,但他们组合起来,可以成为一个产品族,称之为抽象工厂模式。原创 2014-08-17 13:56:31 · 1264 阅读 · 0 评论 -
C++设计模式之状态模式(三)
3、使用环境类实现状态的转换 在状态模式中实现状态转换时,具体状态类可通过调用环境类Context的setState()方法进行状态的转换操作,也可以统一由环境类Context来实现状态的转换。此时,增加新的具体状态类可能需要修改其他具体状态类或者环境类的源代码,否则系统无法转换到新增状态。但是对于客户端来说,无须关心状态类,可以为环境类设置默认的状态类,而将状态的转换工作交给具体状态类原创 2014-08-30 22:45:37 · 1353 阅读 · 0 评论 -
C++设计模式之状态模式(一)
在阐述状态模式之前,先来看一个例子。一个银行取款问题: 如果账户余额大于0,则正常取款;如果余额在-2000和0之间,则透支取款;如果余额小于-2000,则账户处于冻结状态,无法进行取款操作。 实现代码如下://银行账户class Account{private: //余额 int m_nBalance; public: //取款操作 void WithDraw()原创 2014-08-30 20:12:28 · 1321 阅读 · 0 评论 -
C++设计模式之抽象工厂模式(二)
抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模原创 2014-08-17 18:10:34 · 1840 阅读 · 0 评论 -
C++设计模式之外观模式(二)
2、手机备份软件的设计与实现某软件公司将开发一款手机备份软件,功能如下:能够对手机中的通讯录,短信,照片这些资源进行备份。通讯录,短信,照片备份是三个独立的模块。请用外观模式对此进行设计。1.不使用外观模式的实现方式 TelphoneNumber为通讯录备份模块、ShortMessage为短信备份模块、Image为照片备份模块。实现代码如下:#原创 2014-08-31 20:32:48 · 1735 阅读 · 0 评论 -
C++设计模式之外观模式(一)
自己有过组装电脑的人都知道,需要到电子市场去购买CPU、主板、硬盘、内存、显示器、光驱等配件。这个方案是好,但需要对各种配件都比较熟悉,这样才能选择最合适的配件,而且还需要考虑配件之间的兼容性。还有一个方案,就是到电子城,找一家专门组装电脑的公司,把自己的要求提出来,然后等着提电脑就好了。我们不需要关心要购买什么样的配件,也不需要知道电脑是如何组装起来的,所有这些操作都交给电脑组装公司,由它代为完原创 2014-08-31 19:06:40 · 1143 阅读 · 0 评论 -
C++设计模式之状态模式(四)
4、状态模式总结 状态模式将一个对象在不同状态下的不同行为封装在一个个状态类中,通过设置不同的状态对象可以让环境对象拥有不同的行为。而状态转换的细节对于客户端而言是透明的,客户端不直接操作状态类,也就不需要知道状态转换细节,降低了客户端与具体状态类的耦合性。状态类和环境类是一种组合的关系,当客户端调用环境类的方法时,环境类将委托调用状态类的方法。使用状态模式封装了一个个具体的状态类,原创 2014-08-31 10:54:48 · 1419 阅读 · 0 评论 -
C++设计模式之建造者模式(一)
在内蒙古这辽阔的草原上,放养着成千上万的奶牛。蒙牛集团在这里崛起,迅速抢占中国大半牛奶市场,造就了一个商业帝国。蒙牛集团牛奶生产流程大致是这样的: 放养奶牛--->牛奶加工--->牛奶包装--->销售。经历从放养奶牛到进行市场销售这一系列环节,蒙牛牛奶才得以诞生。虽然生产流程比这个流程还复杂,但对客户而言,根本不需要知道牛奶生产的细节,只需要到超市购买就行了。在设计模式中,也存在一个类似的模式,封原创 2014-08-18 21:20:47 · 1011 阅读 · 0 评论 -
C++设计模式之外观模式(三)
3、外观模式总结 引入了外观类,解除了客户类与子系统的耦合性。客户类不需要直接操作子系统,而是由外观类负责处理,对客户端而言是透明的,客户类只需要操作外观类就可以了,符合"迪迷特法则"。如果多个地方需要Facade,也就是说外观可以实现功能的共享,也就是实现复用,同样的调用代码只用在Facade里面写一次就好了,不用在多个调用的地方重复写。如果某个系统模块需要修改,只需要修改这个系统模块原创 2014-08-31 21:41:54 · 1618 阅读 · 0 评论 -
C++设计模式之中介者模式
在没有引入星形网络拓扑图之前,计算机之间可以直接通信,但如果某台计算机要和其它多台计算机进行通信,则这台计算机必须认识所要进行通信的其余计算机。计算机与计算机之间存在多对多的关系,导致计算机之间关系非常复杂。引入星形网络拓扑图之后,计算机之间不再直接进行通信,而是由交换机进行处理。计算机不需要认识其它的计算机,只需要认识交换机就可以了。计算机之间的关系从多对多变成了一对多。在设计模式中也存在类似的原创 2014-09-03 22:47:45 · 1427 阅读 · 0 评论 -
C++设计模式之工厂方法模式(一)
1、工厂方法模式概述 在简单工厂模式中只提供一个工厂类,该工厂类处于对产品类进行实例化的中心位置,它需要知道每一个产品对象的创建细节,并决定何时实例化哪一个产品类。简单工厂模式最大的缺点是当有新产品要加入到系统中时,必须修改工厂类,需要在其中加入必要的业务逻辑,这违背了“开闭原则”。此外,在简单工厂模式中,所有的产品都由同一个工厂创建,工厂类职责较重,业务逻辑较为复杂,具体产品原创 2014-08-14 22:47:57 · 1251 阅读 · 0 评论 -
C++设计模式之适配器模式(三)
4、适配器模式总结 在对象适配器模式中,适配器与适配者之间是关联关系;在类适配器模式中,适配器与适配者之间是继承关系。不论是对象适配器还是类适配器,适配器模式都将现有接口转化为客户类所期望的接口,实现了对现有类的复用。为了避免两个或者多个事物之间直接耦合,应该如何分配职责? 大多数情况都可以通过增加一层间接性来解决,将职责分配给中介对象,使其作为其他构件或服务之间的媒介,以避免他原创 2014-08-27 12:49:10 · 1520 阅读 · 0 评论 -
C++设计模式之建造者模式(二)
3、省略指挥者Director的建造者模式 指挥者类Director在建造者模式中扮演非常重要的作用,简单的Director类用于指导具体建造者如何构建产品,它按一定次序调用Builder的buildPartX()方法,控制调用的先后次序,并向客户端返回一个完整的产品对象。Direcotr针对抽象的建造者进行编程,如果需要不同的建造者,只需把建造者传入指挥者类,无需修改之前的代码。原创 2014-08-19 22:58:22 · 2029 阅读 · 0 评论 -
C++设计模式之建造者模式(三)
4、引入钩子方法的建造者模式 建造者模式除了逐步构建一个复杂产品对象外,还可以通过Director类来更加精细地控制产品的创建过程,例如增加一类称之为钩子方法(HookMethod)的特殊方法来控制是否对某个buildPartX()的调用,也就是判断产品中某个部件是否需要被建造。钩子方法的返回类型通常为boolean类型,方法名一般为isXXX(),钩子方法定义在抽象建造者类中。在抽原创 2014-08-20 00:11:01 · 2185 阅读 · 0 评论 -
C++设计模式之模板方法模式
临近毕业,很多人都会到人才网发布简历以寻求符合自己要求的岗位。登陆人才网,系统会给我们提供一份统一的模板,我们只需要按照要求填写个人信息、教育背景、工作经历、项目经验等内容就可以了。虽然大家都是使用相同的模板,但每个人填写的求职信息各不相同,简历也就各不一样。在设计模式中,也存在类似的一种模式。实现某个功能需要多个步骤,其中有些步骤是固定的,有些步骤是不固定的,存在可变性,提供一个模板方法来定义这原创 2014-08-22 19:35:12 · 1129 阅读 · 0 评论 -
C++设计模式之策略模式
这两年,中国好声音席卷全国,深受观众的青睐,收视率也创造了新高。无论你是否身份低微或是高富帅,都可以通过好声音这个平台,实现自己的明星梦。紧随其后,中国好舞蹈等节目铺天盖地席卷而来,给选手一个圆梦的机会。如果想实现明星梦,可以参加中国好声音,也可以参加中国好舞蹈这些节目,还可以参加星光大道,或者像筷子兄弟一样,拍摄MV。实现明星梦的方式很多,根据自己的喜爱选择其中的一种方式。在设计模式中,也存在一原创 2014-08-23 20:23:18 · 1137 阅读 · 0 评论 -
C++设计模式之适配器模式(一)
现在的笔记本都只存在USB接口,用来口,电脑上存在的是USB接口,两者如何通信呢?可以使用USB转串口线连接电脑和嵌入式设备,其中USB一端连接电脑、串口和外部设备进行通信。然而在一些嵌入式设备上(例如ARM9),通常使用串口和电脑进行通信。嵌入式设备上存在的是串一端连接嵌入式设备。本来电脑和嵌入式设备由于接口不兼容,无法进行通信,而使用USB转串口线这个适配器,两者之间就可以正常进行数据通信。在原创 2014-08-26 21:01:34 · 2180 阅读 · 0 评论 -
C++设计模式之适配器模式(二)
3、Socket网络通信的设计与实现------类适配器 除了对象适配器模式之外,适配器模式还有一种形式,那就是类适配器模式,类适配器模式和对象适配器模式最大的区别在于适配器和适配者之间的关系不同,对象适配器模式中适配器和适配者之间是关联关系,而类适配器模式中适配器和适配者是继承关系。不管是对象适配器还是类适配器,都是为了复用适配者类的功能。 SocketPackage就是成熟原创 2014-08-26 22:56:34 · 1509 阅读 · 0 评论 -
C++设计模式之原型模式(一)
看到上图中的百元大钞、心里总在想这Money是我的那该多好。仔细看这些百元大超,除了编号不同外,其余的信息都是一样的。印刷厂首先有一张100元的钞票,然后把它当作原型,印刷出一叠叠的钞票,流入市场。在设计模式中也存在一个类似的模式,可以根据一个原型对象克隆出多个一模一样的对象,该模式称之为原型模式。原创 2014-08-07 12:07:13 · 1351 阅读 · 0 评论 -
C++设计模式之原型模式(三)
3、原型模式总结原创 2014-08-07 22:43:42 · 1088 阅读 · 0 评论 -
C++设计模式之简单工厂模式(一)
简单工厂模式并不属于GoF 23个经典设计模式,但通常将它作为学习其他工厂模式的基础,它的设计思想很简单,其基本流程如下: 首先将需要创建的各种不同对象(例如各种不同的Chart对象)的相关代码封装到不同的类中,这些类称为具体产品类,而将它们公共的代码进行抽象和提取后封装在一个抽象产品类中,每一个具体产品类都是抽象产品类的子类;然后提供一个工厂类用于创建各种产品,在工厂类中提供原创 2014-08-12 12:16:49 · 1338 阅读 · 0 评论 -
C++设计模式之原型模式(二)
3.使用设计模式的实现原创 2014-08-07 21:23:39 · 1118 阅读 · 0 评论 -
C++设计模式之单例模式
世界上只有一个中国,只有一个fujin原创 2014-08-04 20:07:11 · 2222 阅读 · 0 评论 -
C++设计模式之简单工厂模式(二)
3、使用模式的实现方式原创 2014-08-12 22:58:41 · 1338 阅读 · 0 评论 -
C++设计模式之代理模式
IPhone 6已经在中国香港开售了,圆了在专卖店等候一个多月苹果粉丝的苹果梦。然而对中国大陆而言,需要到9月17日苹果才在大陆开售。这对中国大陆的粉丝而言,不亚于一种煎熬,因此而滋生一种代购方式。很多中国大陆的苹果粉托在香港的朋友代为购买,或者中介在中国香港购买苹果后,转卖给大陆的苹果粉。在设计模式中,也存在一种类似的模式,当客户端无法直接访问某个对象或访问某个对象存在困难时可以通过一个代理对象原创 2014-10-01 16:54:18 · 1018 阅读 · 0 评论