![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
文章平均质量分 85
CherishPrecious
追求技术的道路永无止境。
展开
-
第31章 新的设计模式(3)
31.3 空对象模式(Null Object Pattern)31.3.1 定义和类图(1)定义:通过实现一个默认的无意义对象来避免NULL值出现。简单地说,就是为了避免在程序中出现NULL值判断而诞生的一种常用设计方法。(2)类图31.3.2 应用场景(1)不使用空对象模式的例子【编程实验】利用工厂模式创建图书//新设计模式——空对象模式//场景:利用简单工厂...原创 2018-11-15 08:44:56 · 132 阅读 · 0 评论 -
第4章 创建型模式—工厂方法模式(2)
2. 工厂方法模式2.1工厂方法模式的定义(1)定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂模式使一个类的实例化延迟到其子类 ①Product:定义了工厂方法创建对象的接口。也就是实际需要使用的产品对象的接口 ②ConcreteProduct:具体的Product接口的实现对象。 ③Factory(Creator):定义了工厂方法的抽象类并返回一个产品对...原创 2018-11-12 09:29:16 · 249 阅读 · 0 评论 -
第30章 混编模式(3)
30.3 事件触发器的开发(观察者模式+中介者模式)30.3.1 场景介绍(1)有一产品它有多个触发事件(如创建事件、修改、删除),如创建文本框时触发OnCreate事件,修改时触发onChange事件,双击时触发onDblClick事件。(2)当产品触发事件时,会创建相应的产品事件对象(ProductEvent),并将这个事件对象传递给观察者,以便通知观察者该事件的发生。(3)观...原创 2018-11-14 08:54:47 · 272 阅读 · 0 评论 -
第30章 混编模式(2)
30.2 迷你版交易系统(工厂模式+策略模式)30.2.1 IC卡的两种金额(1)固定金额:指员工不能提现的金额,这部分金额只能用来特定消费,即员工日常必需的消费,如食堂内吃饭、理发、健身等活动。(2)自由金额:可以提现,也可以用于消费,30.2.2 扣款策略(假设卡内有充足的余额)(1)策略1:会对IC卡的两个金额产生影响 IC卡固定余额 = IC卡现有固定金额...原创 2018-11-14 08:49:44 · 310 阅读 · 0 评论 -
第30章 混编模式(1)
30.1 命令链模式(命令模式+责任链模式)30.1.1 UNIX下的命令规则(如ls)(1)命令名为小写字母(2)命令名、选项、操作数之间以空格分隔,空格数量不受限制(3)选项之间可以组合使用,也可以单独拆分使用(4)选项以“-”开头30.1.2 ls命令详解(如ls -a -l /usr)(1)ls:简单列出一个目录下的文件;ls –l:详细列出目录下的文件;ls ...原创 2018-11-14 08:48:07 · 245 阅读 · 0 评论 -
第29章 跨战区大PK
29.1 策略模式 VS 桥梁模式29.1.1 策略模式【编程实验】用策略模式实现邮件发送(1)有文本和超文本两种格式的邮件,将这两种格式封装成两种不同的发送策略。(2)文本邮件和超文本邮件分别是两种不同格式的邮件的封装。MailServer是一个环境角色,它接收一个MailTemplate对象,并通过sendMail方法将邮件发送出去。//跨战区大PK——策略模式和桥接...原创 2018-11-14 08:46:36 · 212 阅读 · 0 评论 -
第28章 行为型模式大PK
27.1 策略模式 VS 命令模式27.1.1 策略模式实现压缩算法//行为型模式大PK——策略模式和命令模式//实例:用策略模式实现压缩算法#include <iostream>#include <string>using namespace std;//抽象压缩算法class Algorithm{public: //压缩算法 ...原创 2018-11-14 08:36:49 · 165 阅读 · 0 评论 -
第5章 创建型模式—抽象工厂模式
1. 抽象工厂的定义(1)提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类 ①只需要知道创建一系列对象的接口,而无需知道具体使用的是哪一个实现 ②这一系列对象是相关或相互依赖的,也就是说既要创建对象,还要约束它们之间的关系。 ③一系列对象是构建新对象所需要的组成部分,并且对象之间相互有约束。如电脑由CPU和主板等组成,但CPU的针脚数和主板提供的插口必须是匹...原创 2018-11-12 09:31:16 · 339 阅读 · 0 评论 -
第6章 创建型模式—建造者模式
1. 建造者(Builder,或生成器)模式的定义(1)将一个复杂对象构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 ①上述提到的“构建”是指构造过程的算法(即构造顺序,位于director类中),“表示”指生成各部件的具体细节(或叫实现,位于Builder或其子类中)。 ②由指导者(director)来指导构造过程,而建造者(builder)负责每步的对象的具体实现和...原创 2018-11-12 09:33:27 · 196 阅读 · 0 评论 -
第7章 创建型模式—原型模式
1. 原型模式(Prototype pattern)的定义(1)用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 ①通过克隆来创建新的对象实例 ②新的对象实例复制原型实例属性的值(2)原型模式的结构和说明 ①Prototype:声明一个克隆自身的接口,用来约束想要克隆自己的类,要求他们都要实现这里定义的克隆方法。 ②ConcretePrototyp...原创 2018-11-12 09:36:45 · 250 阅读 · 0 评论 -
第31章 新的设计模式(2)
31.2 对象池模式31.2.1 定义和类图(1)定义:对象池是一种设计模式,它通过管理有限对象复用来共享某些稀少或必须付出昂贵代价的资源。(2)类图:31.2.2 对象池的扩展接口(1)两级对象池方式:空闲对象池和已用对象池(2)利用Wrapper模式包装复用对象,使附加一些属性(如空闲时间)class wrapper{private: int us...原创 2018-11-15 08:43:34 · 146 阅读 · 1 评论 -
第31章 新的设计模式(1)
31.1 规格模式(Specification Pattern)31.1.1 查询筛选条件(1)场景:根据条件从数据库的用户表中筛选出对象(2)存在问题 ①findUserByAgeThan和findUserByName两个方法中除了if后面的判断条件不同,其他地方完全一样 ②这两个程序中唯一的变化点就是条件语句,可以将这里封装起来,后面的例子会设计一个规格类,用于封装整个...原创 2018-11-15 08:40:52 · 242 阅读 · 0 评论 -
第13章 结构型模式—享元模式
1. 享元模式(Flyweight Pattern)的定义(1)运用共享技术高效地支持大量细粒度的对象 ①对象内部状态:数据不变且重复出现,这部分不会随环境变化而改变,是可以共享的。 ②对象外部状态:数据是变化的,会随环境变化而改变,是不可以共享的。 ③所谓的享元,就是把内部状态的数据分离出来共享,通过共享享元对象,可以减少对内存的占用。把外部状态分离出来,放到外部,让应用程...原创 2018-11-12 09:52:22 · 236 阅读 · 0 评论 -
第12章 结构型模式—外观模式
1. 外观(门面)模式(Facade Pattern)的定义(1)为子系统中的一组接口提供一个一致的界面,Façade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 ①这里说的界面是指从一个组件外部来看这个组件,能够看到什么,也就是外观。如从一个类外部看这个类,那么这个类的public方法或接口就是他的外观。 ②这里所说的“接口”是指外部和内部交互的一个通道(方法),...原创 2018-11-12 09:49:35 · 183 阅读 · 0 评论 -
第11章 结构型模式—装饰模式
1. 装饰模式(Decorator Pattern)的定义(1)动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式比生成子类更为灵活。 ①装饰模式是为对象(而不是类)添加功能的。 ②用组合方式,而不是继承方式为对象添加功能。(2)装饰模式的结构和说明 ①Component:组件对象的接口,可以给这些对象动态地添加职责。 ②ConcreteCompone...原创 2018-11-12 09:47:33 · 200 阅读 · 0 评论 -
第10章 结构型模式—组合模式
1. 组合模式(Composite Pattern)的定义(1)将对象组合成树型结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。(2)组合模式的结构和说明 ①Component:抽象的组件对象,为组合中的对象声明接口,让客户端可以通过这个接口来访问和管理整个对象结构,可以在里面为定义的功能提供缺省的实现。 ②Leaf:叶子节点对象,...原创 2018-11-12 09:44:57 · 324 阅读 · 0 评论 -
第9章 结构型模式—桥接模式
1. 桥接模式(Bridge Pattern)的定义(1)将抽象部分与它的实现部分分离,使它们都可以独立地变化 ①一般的“抽象”与“实现”是指父子类的继承关系。但这里,GoF所谓的“抽象”是如果引起一个类变化是多维度的因素(设为2维),就将其他变化因素抽象成一个接口,在“Abstraction类”中只留这个接口,然后通过对象组合(而不是继承)的方式去依赖这个接口。而“实现”是指在让另一个...原创 2018-11-12 09:41:28 · 245 阅读 · 0 评论 -
第8章 结构型模式—适配器模式
1. 适配器模式(Adpater pattern)的定义(1)将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原来由于接口不兼容而不能一起工作的那些可以一起工作。(2)适配器模式的结构和说明 ①Client客户端,调用自己需要的领域接口Target ②Target:定义客户端需要的跟特定领域相关的接口 ③Adaptee:己经存在的接口,通常能满足客户端的...原创 2018-11-12 09:39:16 · 247 阅读 · 0 评论 -
第27章 结构型模式大PK
27.1 代理模式 VS 装饰模式27.1.1 代理模式(1)场景:客人找运动员代理要求安排运动员参加比赛(2)说明:代理人有控制权,可以拒绝客人的要求,也可以答应安排,甚至自己下去跑(因为有些运动员本身就作自己的代理)【编程实验】找代理安排运动员比赛//结构型模式大PK——代理模式和装饰模式//实例:找代理安排运动员比赛#include <iostream&g...原创 2018-11-14 08:31:49 · 173 阅读 · 0 评论 -
第26章 创建型模式大PK
26.1 工厂方法模式 VS 建造者模式26.1.1 按工厂方法建造超人(1)产品:两类超人,成年超人和未成年超人。(2)工厂:这里选择简单工厂【编程实验】工厂方法建造超人//创建型模式大PK——工厂方法和建造者模式//实例:利用简单工厂创建的超人#include <iostream>using namespace std;//***********...原创 2018-11-14 08:28:33 · 172 阅读 · 0 评论 -
第25章 行为型模式—访问者模式
1. 访问者模式(Visitor Pattern)的定义(1)定义:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 ①模式是要解决当为对象添加新的操作和功能时候,如何尽可能不修改对象的类的一种方法。一般为对象添加功能,是需要向对象添加成员函数,但这里是通过添加一个访问者,由访问者去实现对象需要的新功能。 ②该模式主要是针对...原创 2018-11-14 08:24:56 · 299 阅读 · 0 评论 -
第22章 行为型模式—状态模式
1. 状态模式(State Pattern)的定义(1)定义:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。 ①状态和行为,它们的关系可以描述为“状态决定行为” ②因状态是在运行期被改变,行为也会在运行期根据状态的改变而改变。看起来,同一个对象,在不同的运行时刻,行为是不一样的,就像是类被修改了一样。(2)状态模式的结构和说明 ①Contex...原创 2018-11-13 09:01:27 · 338 阅读 · 0 评论 -
第21章 行为型模式—观察者模式
1. 观察者模式(Observer Pattern)的定义(1)定义:定义对象间的一种一对多的依赖关系。当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。(2)观察者模式的结构和说明(拉模型) ①Subject:目标对象,通常具如的功能:一个目标可以被多个观察者观察;目标提供对观察者的注册和退订的维护;当目标的状态发生变化时,目标负责通知所有注册的、有效的...原创 2018-11-13 08:58:05 · 292 阅读 · 0 评论 -
第20章 行为型模式—备忘录模式
1. 备忘录模式(Memento Pattern)的定义(1)定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 ①不破坏封装性:对象不能暴露它不应该暴露的细节。 ②捕获对象的内部状态:保存状态的目的是为了恢复,把以将某个对象的状态保存在备忘录对象中,以便以后的恢复。 ③对象的内部状态保存在备忘录对象中...原创 2018-11-13 08:54:42 · 279 阅读 · 0 评论 -
第19章 行为型模式—中介者模式
1. 中介者模式(Mediator Pattern)的定义(1)定义:用一个中介对象来封装一系统对象交互。中介者使得各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 ①中介者模式主要用来将同事类之间网状结构变为星状结构,使同事类之间的关系变的清晰一些。 ②所有对象只跟中介者对象进行通信,相互之间不再有联系,这样也能够集中控制这些对象的交...原创 2018-11-13 08:52:31 · 216 阅读 · 0 评论 -
第18章 行为型模式—迭代器模式
1. 迭代器模式(Iterator Pattern)的定义(1)定义:提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。 ①迭代器迭代的是具体的聚合对象(如数组和链表等),它围绕的是“访问”做文章。 ②可用不同的遍历策略来遍历聚合,比如是否需要过滤 ③为不同聚合结构提供统一的迭代接口,也就是说通过一个迭代接口可以访问不同的聚合结构,这叫做多态迭代。...原创 2018-11-13 08:49:53 · 194 阅读 · 0 评论 -
第17章 行为型模式—解释器模式
1. 解释器模式(Interpreter Pattern)的定义(1)定义 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 ①文法:即语法规则。在解释器模式中每一个语法都将对应一个解释器对象,用来处理相应的语法规则。它对于扩展、改变文法以及增加新的文法规则都很方便。 ②解释器模式描述了如何为简单的语言定义一个文法,如何在该语言...原创 2018-11-13 08:46:31 · 149 阅读 · 0 评论 -
第16章 行为型模式—命令模式
1. 命令模式(Command Pattern)的定义(1)定义 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 ①封装请求:抽象出需要执行的动作,封装成对象(有统一的接口)。 ②参数化:可以用不同的命令对象,去参数化配置客户的请求。(即,将命令对象作为参数去供Invoker调用)。(2)命令模式的结构和...原创 2018-11-13 08:43:32 · 350 阅读 · 0 评论 -
第15章 行为型模式—职责链模式
1. 职责链模式(Chain Of Responsibility)的定义(1)定义 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 ①标准的职责链模式中,只要有对象处理了请求,这个请求就到此为至,不再被传递和处理了。 ②但也可以变形使用职责链,就是让这个请求继续传递,每个职责对象...原创 2018-11-13 08:34:55 · 221 阅读 · 0 评论 -
第23章 行为型模式—策略模式
1. 策略模式(Strategy Pattern)的定义(1)定义:定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。 ①算法是同一接口的不同实现,地位是平等的,可以相互替换。 ②引入上下文对象,可以实现让算法能独立使用它的客户。因为这个对象负责持有算法,但不负责决定具体选用哪个算法,把选择算法的功能交给了客户。 ③当客户...原创 2018-11-13 09:03:59 · 211 阅读 · 0 评论 -
第1章 UML基础:类的关系
1. 类的关系1.1 继承和实现:继承表示有父子关系 1.2 依赖:(use–a),表示一个类要使用(use)另一个类。(1)类图(2)三种依赖方式:函数参数或返回值、局部变量和静态成员变量或函数1.3 关联:是一种平等的、朋友关系(1)双向关联:双方都知道对方的存在,都可以调用对方的公有成员变量和函数 ①在代码的表现为双方都拥有对方的一个指针或引用。注意...原创 2018-11-08 08:26:51 · 202 阅读 · 0 评论 -
第2章 面向对象的设计原则(SOLID):1_单一职责原则(SRP)
1. 单一职责原则(Single Responsibility Principle,SRP)1.1 单一职责的定义(1)定义:一个类应该仅有一个引起它变化的原因。这里变化的原因就是所说的“职责”。(2)如果一个类有多个引起它变化的原因,也就意味着这个类有多个职责。即把多个职责耦合在一起了。(3)“职责”的粒度不好量化。实际开发中,这个原则最容易违反1.2 单一职责的优点(1...原创 2018-11-08 08:28:20 · 244 阅读 · 0 评论 -
第24章 行为型模式—模板方法模式
1. 模板方法模式(Template Method Pattern)的定义(1)定义:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。(2)模板方法模式的结构和说明 ①AbstractClass:抽象类。用于定义算法骨架和抽象的原语操作,具体的子类通过重定义这些原语操作来实现一个算法的各个步骤。在这个...原创 2018-11-14 08:21:40 · 148 阅读 · 0 评论 -
第4章 创建型模式—工厂方法模式(1)
1. 简单工厂1.1 简单工厂的定义(1)提供一个创建对象实例的功能,而无须关心其具体实现。 ①Api接口:定义客户所需要的功能接口 ②Impl:具体实现Api的实现类,可能会有多个 ③SimpleFatory类:工厂,选择合适的实现类来创建Api接口对象 ④Client:客户端,通过Factory来获取Api接口对象,然后面向Api接口编程。(2)思考简单...原创 2018-11-08 08:45:32 · 129 阅读 · 0 评论 -
第3章 创建型模式—单例模式
1. 单例模式(Singleton Pattern)(1)定义:保证一个类仅有一个实例,同时提供能对该实例加以访问的全局访问方法。(2)解决思路: ①在类中,要构造一个实例,就必须调用类的构造函数。如此,为了防止在外部调用类的构造函数而创建实例,需要将构造函数的访问权限设为protected或private; ②最后,需要提供全局访问点,就需要在类中定义一个static函数...原创 2018-11-08 08:43:26 · 254 阅读 · 0 评论 -
第2章 面向对象的设计原则(SOLID):6_开闭原则
6. 开闭原则(Open Closed Principle,OCP)6.1 定义(1)一个类应该对扩展开放,对修改关闭。要求通过扩展来实现变化,而且是在不修改己有的代码情况下进行扩展,也不必改动己有的源代码或二进制代码。(2)在软件生命周期内,变化是一个既定的事实,在设计时尽量适应这些变化,以提高项止的稳定性和灵活性,真正实现“拥抱变化”。而开闭原则告诉我们要通过扩展来实现这些变化而不...原创 2018-11-08 08:38:27 · 171 阅读 · 0 评论 -
第2章 面向对象的设计原则(SOLID):5_迪米特法则
5. 迪米特法则(Law of Demeter,LoD)5.1 定义(1)应尽量减少其他对象之间的交互,对象只和自己的朋友交谈,即对其他依赖的类越少越好(不要和太多的类发生关系)。(2)尽量不要让类和类之间建立直接的关系,这样可减少类与类之间的依赖,降低类之间的耦合。(3)一个类应对自己需要耦合的类知道得最少,只知道其public方法,其内部如何复杂自己没有关系,也叫最少知识原则(...原创 2018-11-08 08:37:08 · 273 阅读 · 0 评论 -
第2章 面向对象的设计原则(SOLID):4_接口隔离原则(ISP)
4. 接口隔离原则(Interface Segregation Principle,ISP)4.1 定义(1)使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。类间的依赖关系应该建立在最小接口上(2)接口尽量细化,同时接口中的方法尽量少。每个接口中只包含一个客户端(如子模块或业务逻辑类)所需的方法即可,这种机制也称为“定制服务”,即为不同的客户端提供宽窄不...原创 2018-11-08 08:35:07 · 196 阅读 · 0 评论 -
第2章 面向对象的设计原则(SOLID):3_依赖倒置原则(DIP)
3. 依赖倒置原则(Dependence Inversion Principle,DIP)3.1 定义(1)要依赖抽象,不要依赖具体的实现类。简单的说就是对抽象(或接口)进行编程,不要依赖实现进行编程,这样就降低了客户与实现模块间的耦合。包含3层含义: ①高层模块不应依赖低层模块,两者都应该依赖于抽象 ②抽象不应该依赖细节 ③细节应该依赖于抽象(2)何为“高层模块”和...原创 2018-11-08 08:33:18 · 195 阅读 · 0 评论 -
第2章 面向对象的设计原则(SOLID):2_里氏替换原则(LSP)
2. 里氏替换原则(Liskov Substitution Principle,LSP)2.1 定义(1)所有使用基类的地方必须能透明地使用子类替换,而程序的行为没有任何变化(不会产生运行结果错误或异常)。只有这样,父类才能被真正复用,而且子类也能够在父类的基础上增加新的行为。也只有这样才能正确的实现多态(2)当一个类继承了另一个类时,子类就拥有了父类中可以继承下来的属性和操作。但如果...原创 2018-11-08 08:31:03 · 241 阅读 · 0 评论