![](https://img-blog.csdnimg.cn/20190829155608695.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
《大话设计模式》读书笔记
秋招在即,设计模式自然少不了,重读《大话设计模式》这本书,体会不少。现将C++版本的各模式整理如下。
Chen-FangLiang
这个作者很懒,什么都没留下…
展开
-
大话设计模式(1)简单工厂模式
一、场景及UML图 注意一点:Factory与ConcreteProduct二者的关系是依赖关系,因为其是作为一个方法的参数出现在Factory中。 二、包含的角色 简单工厂模式包含三个角色: (1)工厂类Factory:工厂类是用来制造产品的。因此,在Factory中有一个用于制造产品的Create函数或者Generate函数之类的函数。这个函数能够根据“标识符”的不同生成不同的Co...转载 2019-08-30 19:22:58 · 77 阅读 · 0 评论 -
大话设计模式(13)职责链模式
一、场景描述及UML图 简单概括:适用于串序指向的策略,如算法流:A-B-C-D-E-F,各个算法依次指向,特定条件下某些算法可能会跳过。 关键词:SetSuperior() 二、概念 职责链模式(Chain Of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合。将这个对象连成一条链,并沿着这条链传递该请求,知道有一个对象处理它为止。...转载 2019-09-06 11:58:20 · 109 阅读 · 0 评论 -
大话设计模式(12)单例模式
一、UML图 二、概念 单例模式:保证一个类仅有一个实例,并提供一个访问他的全局访问点。[DP] 通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象。一个最好的办法就是,让类自身负责保护它的唯一实例。这个类可以保证没有其他实例可以被创建,并且他可以提供一个访问该实例的方法。 三、注意: 使用单例模式,只能保证一个线程内对象不会被多次创建,而不不能保证多线程的情...转载 2019-09-06 11:32:28 · 102 阅读 · 0 评论 -
大话设计模式(11)观察者模式
一、场景及UML图 简单描述,就是为了实现一个对象的变更导致一系列对象的变更的场景,但同时要依赖倒置。 关键词:Subject维护一个Observer列表,Subject执行Notify()时就执行列表中的每个Observer的Update()。 二、概念 观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,...转载 2019-09-06 11:11:44 · 111 阅读 · 0 评论 -
大话设计模式(10)建造者模式
一、场景及UML图 简单描述:该模式有点类似之前的装饰模式,不过二者的区别在于,建造者模式是稳定的,而装饰模式各组件是客户端手动添加的。 关键词:Builder,ConcreteBuilder,Director,建造者模式要求建造过程必须是稳定的。 二、概念 建造者模式(Builder):将一个复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示。 三、说明 角色: ...转载 2019-09-05 20:56:04 · 155 阅读 · 0 评论 -
大话设计模式(9)外观模式
一、场景及UML图 简单理解:就是为一堆复杂代码提供一个抽象接口,使得别的模块调用的时候不需要再关心底层调用细节。 关键词:增加Facade层。 二、概念 外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 三、说明 Q:外观模式在什么时候使用呢? A:分为三个阶段: (1)首先,在设计初期阶段,应该要有意识的将不同...转载 2019-09-05 20:31:14 · 96 阅读 · 0 评论 -
大话设计模式(8)模板方法模式
一、场景及UML图 场景:有点类似于原型模式,不过侧重点不一样。模板方法重点是体现在代码复用。把一些重复性的机制代码全部抽离到父类。 二、概念 模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 三、说明 角色: (1)AbstractClass:是抽象类,其实也就是一个抽象模板,定义并实现了...转载 2019-09-05 20:13:04 · 144 阅读 · 0 评论 -
大话设计模式(7)工厂方法模式
一、场景及UML图 二、概念 工厂方法模式(Factory Method):定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法是一个类的实例化延迟到其子类。 三、包含的角色 (1)抽象工厂 (2)具体工厂 (3)抽象产品 (4)具体产品 四、优势 (1)工厂方法模式是对简单工厂模式的稍微的改进。工厂方法模式的用意是定义一个创建产品对象的工厂接口,将实际工作推迟到子...转载 2019-09-05 14:53:15 · 88 阅读 · 0 评论 -
大话设计模式(6)原型模式
一、场景及UML图 其实就是类的复制,显式的调用拷贝构造函数。二者也是有区别的。 拷贝构造函数类是已知的,原型模式类可以是未知的。或者换一个方式说: 原型模式生成的新对象可能是一个派生类。拷贝构造函数生成的新对象只能是类本身。 原型模式是描述了一个通用方法(或概念),它不管是如何实现的,而拷贝构造则是描述了一个具体实现方法。 关键词:深复制,Clone。 二、概念 原型模式(Pro...转载 2019-08-30 20:25:36 · 81 阅读 · 0 评论 -
大话设计模式(5)代理模式
一、场景及UML图 简单理解:A通过B与C发生关系,此时,对于C而言只知道B的存在,A是透明的。其实底层的方法都是A在实现。相当于在B内部创建了一个匿名的A。 二、概念 代理模式:为其他对象提供一种代理以控制对这个对象的访问。 三、应用场景 (1)远程代理,也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。 (2)虚拟代理,是根据需要创建开...转载 2019-08-30 20:07:50 · 93 阅读 · 0 评论 -
大话设计模式(4)装饰模式
一、场景及UML图 场景:又称修饰模式,就是对类起修饰作用。如类“人”,用类“衣服”来修饰。 关键词:Decorator()函数/setComponent()函数。 二、概念 装饰模式:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。 三、说明 角色: (1)Component是定义一个对象,可以给这些对象动态地添加职责。 (2)Concrete...转载 2019-08-30 19:54:13 · 116 阅读 · 0 评论 -
大话设计模式(3)设计原则
一、单一职责原则(Chapter3) (1)就一个类而言,应该仅有一个引起它变化的原因。 (2)如果一个类承担的职责过多,就等于把这些职责耦合在了一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当发生变化时,设计会遭受到意想不到的破坏。 (3)软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离。 二、开放封闭原则(Chapter4) (...转载 2019-08-30 19:42:31 · 137 阅读 · 0 评论 -
大话设计模式(2)策略模式
一、场景及UML图 如超市打折活动,可能使用不同的打折策略,将各种策略封装,后续只需要修改策略即可。 二、概念 策略模式:他定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。 三、优点 (1)策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,他可以以相同的方式调用所有的算法,减少了各种算...转载 2019-08-30 19:38:53 · 127 阅读 · 0 评论 -
大话设计模式(14)抽象工厂模式
一、UML图 二、概念 抽象方法模式(Abstract Factory):提供一个创建一系列相关或互相依赖对象的接口,而无需指定他们具体的类。 三、包含的角色 (1)抽象工厂 (2)具体工厂:包括具体工厂1和具体工厂2。具体工厂1用于生产具体产品A1和具体产品B1,具体工厂2用于生产具体产品A2和具体产品B2; (3)抽象产品:包括抽象产品A和抽象产品B; (4)具体产品:包括抽象...转载 2019-09-06 12:29:58 · 104 阅读 · 0 评论