读书笔记-head fist
李白-2017
今天经历的所有惊心动魄,都不过是明天的过眼云烟。
展开
-
6. 单件模式
单件模式的特点很鲜明,确保在整个系统中只能实例化一个对象,并提供全局访问点。并且在下面的写法(1)和(3)中是在使用的时候才去创建对象,“延时实例化”,对于很占内存的对象来讲是有利的。当然在使用它的时候要考虑多线程的问题。 总结起来有三种写法:(1)加锁,因为加了lock,只能有一个线程获取到这个lock,其他的线程只能等待。所以在对性能要求不高的时候可以使用。 class原创 2017-10-07 01:13:04 · 148 阅读 · 0 评论 -
14. 代理模式 15.复合模式MVC
14. 代理模式:作为对象的代理对象,在需要使用时,由代理对象创建原始对象。15. MVC : 是一种复合多种模式的设计模式。是模型-视图-控制器的简称。 通常MVC会应用至少3个设计模式,其中视图中包含多个组件,一般会应用组合模式;视图和控制器需要得知模型的变化,所以视图和控制器可以作为模型的观察者,当模型进行一些操作时,可以及时通知视图和控制器原创 2017-10-07 14:32:50 · 214 阅读 · 0 评论 -
13. 状态模式
状态模式:改变对象内部状态,帮助对象控制自己的行为。 书中的例子是糖果机售卖糖果的例子,糖果机共有4种状态,没有投入硬币,已经投入硬币,售卖糖果,已售完。糖果机的动作也有4种,投入硬币,退回硬币、搬动曲柄、发放糖果。通常的做法,对于不同的动作内部会做判断当前的状态,根据状态做不同的实现。这样的做法不利于扩张,当需要加入新的状态时,需要对各个动作进行改动,不利于代码的维护。原创 2017-10-07 13:44:01 · 134 阅读 · 0 评论 -
12. 组合模式
为解决上一章的菜单中包含子菜单和菜单项的问题可以利用组合模式。 组合模式包括三个基本类:组合,组件,叶子原创 2017-10-07 13:38:16 · 149 阅读 · 0 评论 -
11. 迭代器模式
利用相同接口可以遍历不同集合(聚集),且不暴露集合内部的元素。 书中的例子:A餐厅和B餐厅合并,他们的菜单拥有不同的存储方法,如A餐厅用数组array,而B餐厅用list。这样带来的问题是在打印菜单项的时候需要分别遍历他们各种的菜单,这样处理不仅麻烦,而且不利于扩展,当有更多的餐厅被合并的时候,会带来更多的代码修改。如果是将各个餐厅的菜单改为同一种容器来存放,这样带来的改动过大。所原创 2017-10-07 13:16:07 · 199 阅读 · 0 评论 -
10. 模板方法模式
模板方法模式主要有一下几个要点:(1)将算法的框架放在父类中,算法的步骤延迟到子类,不同的子类可以对算法的步骤进行不同处理。(2)算法流程中可以放置一个钩子(hook()),子类可以实现钩子函数,进行条件控制,由子类来控制算法某个步骤是否执行。eg. sort()中可供用户定义的compare函数。 class AbstractClass{public: void原创 2017-10-07 12:56:13 · 153 阅读 · 0 评论 -
9. 外观模式
和适配器模式类似的地方在于,都是对接口做转换,外观模式的意图在于提供一个子系统的简化接口。可以将子系统中需要一起使用的一系列接口放入一个接口中,方便客户程序调用,使客户从子系统解耦出来。 设计原则:最少知识原则,只和你的密友交谈。意思是说要尽可能的减少类之间的耦合度,一个类尽可能只和少量的类交互。原创 2017-10-07 12:46:40 · 147 阅读 · 0 评论 -
8. 适配器模式
适配器模式比较简单,主要对已经编写完成的类进行接口转化。这样做的好处在于能够把类的改动降到最低,减少由于更改带来的不稳定。书中的例子是,由于不同国家的插头有所不同,所以就需要转换接口进行相互适配。 对象适配器类适配器原创 2017-10-07 12:40:17 · 136 阅读 · 0 评论 -
7. 命令模式
这个模式的深入的了解下来内容还是很多的。文中使用遥控器的例子,对此模式的各种用法进行了详细介绍。总结出以下几点内容:原创 2017-10-07 12:14:27 · 297 阅读 · 0 评论 -
5. 抽象工厂模式
抽象工厂的作用是创建产品族。下面将各种具体的pizza进行了分类和抽象,如加州奶酪pizza和纽约奶酪pizza进行抽象,同一种pizza,不同的地方所使用的原材料是不同的。所以从pizza这个抽象类中,派生出一个奶酪pizza类。奶酪pizza类中有一个原料工厂,由这个工厂供应原材料。这样pizza和原料之间被解耦。 Pizza *concretePizzaStoreA::creat原创 2017-10-07 00:53:51 · 152 阅读 · 0 评论 -
4. 工厂模式
工厂模式主要是用来创建对象。文中的例子,不同的pizza store制作不同种类的pizza。对于不同的pizza store可以抽象出来一个抽象的pizza store类,对于不同种类的pizza也可以抽象出来一个抽象的pizza类。pizza store需要实现制作pizza的方法,所以在实例化具体pizza store对象后,调用orderPizza根据传入的不同pizza类型,创建具体的p原创 2017-10-07 00:44:32 · 126 阅读 · 0 评论 -
3. 装饰者模式
文中列举了两个例子,一个是在咖啡厅点饮料,另一个是在java i/o stream中的应用。下面利用第一个例子详细的分析一下装饰者模式。咖啡会分为多种咖啡,顾客在点咖啡时,可能会在点这一杯咖啡的基础上添加一种或多种调味品,如加牛奶、糖、摩卡、豆浆等等。这里顾客点的咖啡就是被装饰者,而调味品则扮演装饰者的角色。这个模式的显著特征是可以做到多个类的叠加,递归嵌套对象。要做到这点,首先各种具原创 2017-10-06 16:12:59 · 190 阅读 · 0 评论 -
2. 观察者模式
本书中的例子,持续采集气象数据(温度、湿度、气压),当采集的数据更新时,相应的当前气温、气温统计和预测气温这三个布告板也要进行更新。在不了解观察者模式前,一般通常的想法是在气象数据类中添加update当前气温、气温统计和预测气温这三个对象的update和display方法。这是基于实现的编程,不利于代码在扩展和维护时添加和删除布告板。原创 2017-10-06 13:24:14 · 177 阅读 · 0 评论 -
1. 策略模式
开篇讲了学习本书的方法,从脑神经角度讲解了本书图文结合的布局,目的是更加有助于读者识记,使得生涩难懂的设计模式学起来轻松了许多。并讲解了应该如何去读懂这本书,可以一句话概括,就是要与书“交谈”,和多思考。本书从本书的排版设计到内容设计,无不表现了作者的精心策划。例如第一章举出各种鸭子具有不同行为的例子,循序渐进地引出了策略模式这个概念。原创 2017-10-06 01:27:03 · 133 阅读 · 0 评论 -
16. 与设计模式相处
1. 设计模式的特点:设计模式简单来讲,就是在某种情景下,针对某种问题的的解决方法。设计模式不是创建出来的,而是被发现的。这就需要从各种应用中进行归纳总结,抽象出来。设计模式不能滥用,最先考虑到的应该是设计的简单性,如果添加设计模式能够提高设计的弹性,那么再去考虑使用他们。在使用设计模式时,不仅要考虑他有利的一面,也要考虑他不利的一面,要进行权衡。2. 设计模式的分原创 2017-10-07 14:34:40 · 167 阅读 · 0 评论