设计模式
文章平均质量分 83
天地一扁舟
这个作者很懒,什么都没留下…
展开
-
设计模式:2策略模式
策略模式:制定一系列的算法,然后封装起来,使他们可以相互替换。本模式使得算法可以独立于使用它的客户而变化,算法完成的功能一样。只是各自实现存在差异。类的划分是为了封装,分类基础是抽象,具有相同属性和功能的对象的抽象几何才是类 实例:Cache替换算法,有先进先出,LRU,随机 main.cpp#include #include #include "Cache原创 2015-08-12 01:34:25 · 380 阅读 · 0 评论 -
设计模式:22 手机软件何时统一_桥接模式
合成/聚合复用原则:尽量使用合成/聚合,尽量不要使用类继承聚合:表示弱拥有关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分。合成:强拥有关系,体现严格的部分和整体的关系,部分和整体的声明周期一样。实例: 大雁-----------雁群||翅膀 游戏,通讯录功能都是软件,让其分离与手机的耦合。应该增加一个手机品牌抽象类和手机软件抽象类手机原创 2015-08-13 14:21:11 · 666 阅读 · 0 评论 -
设计模式:17 适配器模式
适配器模式:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。实例:电源适配器何时使用:系统的数据和行为都正确,但是接口不符时,应该考虑用电源适配器。目的使原有控制范围之外的一个原有对象与某个接口匹配。适配器模式用于:希望复用一些现存的类,但是接口又与服用环境要求不一致的情况。 类型:类适配器模式和对象适配器原创 2015-08-13 14:01:46 · 396 阅读 · 0 评论 -
设计模式:18 备忘录模式
备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象回复到原先保存的状态。实例:玩游戏时保存进度,所保存的进度以文件的形式存在,下次就可以继续玩。这里的进度其实就是游戏的内部状态。文件相当于是在游戏之外保存状态。下次就可以从文件读入保存的进度,从而回复到原来的状态。Originator:发起人,负责创建一个备忘录Mement原创 2015-08-13 14:06:31 · 437 阅读 · 0 评论 -
设计模式:25 世界需要和平_中介者模式
起因:尽管将一个系统分割成许多对象通常可以增加其可复用性,但对象间相互连接的激增又会降低其可复用性了。大量的连接使得一个对象不可能在没有其他对象的支持下工作,系统表现为一个不可分割的整体。所以,对系统的行为进行大改动就困难了。中介者模式:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。Colleagu原创 2015-08-13 14:31:46 · 538 阅读 · 0 评论 -
设计模式:26 项目多也别傻做_享元模式
享元模式:运用共享技术有效地支持大量细粒度的对象 实例:围棋中,棋子是大量细粒度的对象,有些属性内在的,如颜色,有些属性外在的,比如棋盘上的位置,内在属性是可以共享的。区别在于外在属性。可以这样设计:只需要定义两个棋子对象,黑棋和白棋,这两个对象含棋子的内在属性;棋子的外在属性,即棋盘上的位置提取出来,存放在单独的容器中。则容器只存放位置属性,而原来则是棋子对象,减少了空间需求。原创 2015-08-13 14:36:11 · 528 阅读 · 0 评论 -
设计模式:1.3 抽象工厂模式
main.cpp#include #include #include "Factory.h"using namespace std;void process(){ FactoryA factoryA; shared_ptr ptrSinA = factoryA.singleInstance(); if(ptrSinA) { ptrSinA->s原创 2015-08-12 01:30:24 · 481 阅读 · 0 评论 -
设计模式:19 分公司=一部门_组合模式
#include "FinanceDepartment.h"#include using namespace std;FinanceDepartment::FinanceDepartment(const std::string& sName):Company(sName){}FinanceDepartment::~FinanceDepartment(vo原创 2015-08-13 14:12:15 · 667 阅读 · 0 评论 -
设计模式:24 加薪非要老总批?_职责链模式
职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。Handler:定义一个处理请示的接口。ConcreteHandler:具体处理者类,处理它所负责的请求,可访问它的后继者,如果可处理该请求,就处理之,否则就将该请求者转发给它的后继者。 优点:当客户提交一个请求时,请求原创 2015-08-13 14:28:15 · 393 阅读 · 0 评论 -
设计模式:13 建造者模式
建造者模式:将复杂对象的构件与它的表示分离,使得同样的构件过程可以创建不同的表示。用户只需要指定需要建造的类型就可以得到它们,具体的过程和细节不需要知道。Builder:为创建一个Product对象的各个部件指定的抽象接口。ConcreteBuilder:具体建造者,实现Builder接口,构造和装配各个部件Product:具体的产品Director:指挥者,构建一个使原创 2015-08-13 13:46:21 · 383 阅读 · 0 评论 -
设计模式:14 观察者模式
观察者模式:发布-订阅模式。定义一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,当这个主题对象状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己。 Subject:通知者Subject:它所有对观察者对象的引用保存在一个聚集里,每个主题都可以有任何数量的观察者。抽象主题提供接口,可以增加和删除观察者对象Observer:抽象观察者,为所有的具体观察者定义原创 2015-08-13 13:52:20 · 511 阅读 · 0 评论 -
设计模式:23 烤羊肉串引来的思考_命令模式
对于请求排队或记录请求日志,以及支持可撤销的操作等行为时,行为请求者与行为实现者的紧耦合不太合适。用一个服务员来解耦客户和烤肉师傅的处理好处真的是很多。 命令模式:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化。对请求排队或记录请求日志,以及支持可撤销的操作。Command:用来声明类的接口ConcreteCommand:将一个接受者对象绑定于一个动作,调原创 2015-08-13 14:25:16 · 555 阅读 · 0 评论 -
设计模式:28 男人和女人_访问者模式
访问者模式:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 适用:数据结构相对稳定的系统数据结构和作用于结构上的操作之间的耦合解脱开,使得操作集合可以相对自由地哑奴啊/ 目的:把处理从数据结构分离出来/iiao稳定的数据结构和变化的算法,使用访问者模式比较合适。因为访问者模式使得算法操作的增加变得更加容易。 优原创 2015-08-14 00:50:48 · 624 阅读 · 0 评论 -
设计模式:20 想走?可以!先买票_迭代器模式
迭代器模式:含义:提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部何时使用:当你需要访问一个聚集对象,而且不管这些对象是什么都需要遍历的时候,应该考虑使用迭代器模式。你需要对聚集有多种方式遍历时,可以考虑使用迭代器模式。为遍历不同的聚集结构提供如:开始、下一个、是否结束、当前哪一项等统一的接口。迭代器角色:Iterator,负责定义访问和遍历元素的接口具体迭代原创 2015-08-13 14:16:48 · 510 阅读 · 0 评论 -
设计模式: 16 状态模式
状态模式:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。解决的问题:当控制一个对象状态转换的条件表达式过于复杂,把状态的判断逻辑转移到表示不同状态的一系列类中,把复杂的判断逻辑简单化。State:抽象状态类,定义接口以封装与Context一个特定状态相关的行为ConcereteState:具体状态,每个子类实现一个与Context的一个状态相关的行为C原创 2015-08-13 13:56:34 · 374 阅读 · 0 评论 -
设计模式:12 外观模式
外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口。这个接口使得子系统更加容易使用。 Façade:外观类,知道哪些子系统类负责处理请求,将客户的请求代理给适当的子系统对象Subsystem Classes:子系统类几何,实现子系统的功能,处理Façade对象指派的任务,子类中没有对Façade对象的引用。 何时使用:设计初期,将两个层分离,层与层之原创 2015-08-13 11:10:35 · 428 阅读 · 0 评论 -
设计模式: 9 原型模式
原型模式:用原型实例指定创建对象的种类,并且通过拷贝原型创建新的对象。本质:从一个对象再创建另一个可定制的对象,而不需要知道创建细节。总结:对客户隐藏对象创建工作,原型模式是通过拷贝一个现有对象生成新对象的,达到了隔离类对象的使用者和具体类型(易变类)之间的耦合关系的迷路。优点:快速构建相同类型对象,不需关心克隆对象本身类型。 浅复制:被复制对象的所有变量都含有与原来的对象相同原创 2015-08-12 01:57:36 · 387 阅读 · 0 评论 -
设计模式:6 装饰模式
装饰模式:动态地给一个对象添加一些额外职责。增加功能比生成子类更加灵活。模式图:Component:定义对象接口,给对象动态添加职责ConcreteComponent:定义具体对象,给对象添加职责Decorator:装饰抽象类,继承自Component,从外类来扩展Coponent类的功能,Component无需知道Decorator的存在ConcreteDecorat原创 2015-08-12 01:47:38 · 406 阅读 · 0 评论 -
设计模式: 4开放封闭原则
开放封闭原则:软件可以扩展,但不可以修改。扩展---开放,更改---封闭技巧:1当变化发生时,创建抽象来隔离以后发生的同类变化。2在工作开展不久,就知道肯呢个发生的变化,知道需要变化的时间越长,抽象就越困难实例:客户端类->加法类客户端类->运算类(GetResult())(加法类GetResult())(减法类)(乘法类)(除法类)适用:仅对程序中频繁变化的部分进原创 2015-08-12 01:37:32 · 345 阅读 · 0 评论 -
设计模式: 11 迪米特法则
迪米特法则:最少知识原则如果两个类不必直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类,需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。 本质:类应当降低成员的访问权限,强调类之间的松耦合。处在弱耦合的类被修改,不会对有关系的类造成波及。原创 2015-08-12 02:03:09 · 416 阅读 · 0 评论 -
设计模式: 3 单一职责原则
单一职责:一个类而言,仅有一个引起它变化的原因。实例:方块游戏的设计。游戏逻辑 =数组值的变化,界面表示逻辑,根据数组进行绘制。界面和逻辑要分开。优点:类承担指责过多,抑制这个类完成其他指责的能力。变化发生,设计遭到破坏。判断如何分离类:多余一个动机改变一个类,这个类还需要分离原创 2015-08-12 01:36:15 · 360 阅读 · 0 评论 -
设计模式:5 依赖倒转原则
依赖倒转原则:高层模块和底层模块都依赖抽象抽象不依赖细节,细节依赖抽象 实例:常用代码写成程序库,比如对数据库访问做成低层模块,高层去掉用低层就可以问题产生的原因:高层业务逻辑相同时,希望使用不同数据库,希望再利用高层模块,但高层模块与低层的访问数据库绑定在一起了。如果cpu依赖主板,主板坏了,所有部件没用了。 本质:高层模块->接口/抽象类原创 2015-08-12 01:38:39 · 382 阅读 · 0 评论 -
设计模式:10 模板方法模式
模板方法模式:问题出现:用了继承,应该成为子类的模板,所有重复的代码要上升到父类去,而不是让每个子类都重复。解决方法:我们要完成在某一细节层次一致的过程,但个别步骤在更详细的层次上的实现可能不同时,用模板方法模式处理含义:定义一个操作中算法的骨架,将步骤延迟到子类中。模板方法使得子类可以不改变算法结构即可重定义算法的特定步骤。 模板方法模式:把不变行为搬移到超类,去除子原创 2015-08-12 02:01:33 · 440 阅读 · 0 评论 -
设计模式:7 代理模式
代理模式:为其他对象提供一种代理以控制对这个对象的访问Subject类:定义了RealSubject和Proxy的共用接口,这样就在任何使用RealSubject的地方使用Proxy 代理模式应用:1远程代理:为一个对象在不同的地址空间提供局部代表,隐藏一个对象存在于不同地址空间的事实 2虚拟代理:根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象原创 2015-08-12 01:53:09 · 379 阅读 · 0 评论 -
设计模式:21 单例模式
#ifndef SINGLETON_H#define SINGLETON_H#include #include using namespace std;/*关键:1 双重检查机制: //先判断如果第一次创建,然后枷锁,然后在判断是否为空,实例化;如果一进入就加锁,那么效率不好; //如果判断完了再进入加锁,那么多个进程仍然会多次实例化, if(0 ==原创 2014-10-29 00:50:48 · 707 阅读 · 0 评论 -
设计模式:1.2 工厂模式
main.cpp#include #include #include "FactoryA.h"#include "FactoryB.h"#include using namespace std;/*工厂模式缺点:每增加一种产品,就需要增加一个对象的工厂。相比简单工厂,需要更多的类。*/void process(){ FactoryA fa原创 2015-08-12 01:24:41 · 402 阅读 · 0 评论 -
设计模式:1.1 简单工厂模式
简单工厂模式:在工厂类中做判断,从而创造相应的产品。增加新的产品时,就需要修改工厂类。 实例:一家生成处理器的厂家,一个工厂,能够产生两种型号的处理器核。客户需要什么样的处理器核,显示告诉生产工厂。 简单工厂缺点:增加新的产品类型,需要修改工厂类 工厂模式:一个工厂专门用来产生A型号的单核,另一个工厂专门用来生产B型号的单核。客户要做的就是找好工厂,比如要A型原创 2015-08-10 18:07:50 · 454 阅读 · 0 评论 -
设计模式:27 其实你不懂老板的心_解释器模式
解释器模式:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释该语言中的句子。 适用于:如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实力表述为一个简单语言中的句子。这样就可以构建一个解释器:该解释器通过解释这些句子来解决该问题。当有一个语言需要解释执行时,并且你可将该语言中的句子表示为一个抽象语法树时,可以使用解释器模式。原创 2015-08-13 14:39:55 · 501 阅读 · 0 评论 -
设计模式:设计模式经典总结
29.1 演讲任务时间:7月23日下午 17点 地点:小菜办公室 人物:小菜、公司开发部经理 “小菜,”开发部经理来到小菜的办公桌前,“最近我听说你在工作中,用到了很多设计模式,而且在你们同一项目组中引发了关于设计模式的学习和讨论,反响非常好。明天全公司要开关于如何提高软件质量的研讨会,我希望到时你能做一个关于设计模式的演讲。”“我?演讲?给全公司?”小菜很惊讶于经理的转载 2015-08-14 00:52:17 · 3923 阅读 · 5 评论