设计模式简介
2017-11-23 16:57
218 查看
现在在看《大话设计模式》这本书,根据这本书做一些读书笔记。
第一章 简单工厂模式
有不同的产品类,而工厂类去选择某一个产品类进行生产(初始化),即在工厂类中进行switch判断。
第二章 策略模式
在将策略类进行封装调用。
第三章 单一职责原则
每个类的职责是单一的。
第四章 开闭原则
对扩展开放,对修改闭合。(只允许添加类,不允许修改类)。
第五章 依赖倒转原则
抽象不依赖细节,细节依赖抽象。高层模块不依赖于低层模块,都依赖抽象。面向接口的编程。
里氏替换原则: 父类 = new 子类。 父类这时执行的是子类方法()。(多态)
第六章 装饰模式
super()方法的调用艺术。
第七章 代理模式
Android中ContextWrapper、ContextImpl、context之间的关系。
第八章 工厂方法模式
一个产品对应一个工厂,在工厂中新建产品。和简单工厂模式相比,使自己更符合开闭原则,但又把判断的压力交给客户端来进行。
第九章 原型模式
cloneable的调用,浅克隆与深克隆。浅克隆只在内存中复制当前类,当前类中的引用则不进行复制。深克隆则全部复制,但要注意克隆循环。
第十章 模板模式
只把变化提取出来做成抽象类,在子类中重写。Android中自己写的BaseActivity就是使用的模板模式。
第十一章 迪米特法则
减少public的使用,public使用的越少,代码的内聚就越高。只依赖需要依赖的类。
第十二章 外观模式
一个子系统比较复杂,如果调用里边的逻辑就会加大工作量,可能会把人搞疯,这时候做一个外观接口,只要调用这个接口就能实现你需要的功能,这就是外观接口的实现。
第十三章 建造者模式
流程不变,就是步骤永远是固定的具体步骤的实现是不一致的模式。
第十四章 观察者模式
被观察者记录下观察者(用一个数组保存好所有的观察者),当某件事发生时被观察者发出通知调用观察者的方法。还有当被调用的观察者的方法不一致时,就会用到事件委托,将观察者对象和方法保存起来。[b]方法的保存就用到了反射机制。
第十五章 抽象工厂模式
工厂方法模式是产品类和工厂类是一一对应的关系,当一产品还可以分类时,这时候就是也要把产品进行抽象处理,这时候就是抽象工厂模式了。现在的抽象工厂模式选择比较复杂,如果和简单模式一结合选择就简单了,但不是最优结果,如果用反射代替switch选择,工作量就会大大减少。
第十六章 状态模式
将一个长的 switch 或 if 判断给拆开,分成不同的类。这里讲的更清晰。
第十七章 适配器模式
方法的替换,替换成合适的方法。为特例找方法的一种模式,在编码中相当于亡羊补牢,不能盲目使用。
第十八章 备忘录模式
实现的是数据的一种缓存,缓存类只对应相应的数据类,在数据类中进行实例化,并把所有的public暴露给它。需要一个发起类,备忘录,管理类。发起类保存数据过程和接收数据,备忘录类是保存数据的工具,管理类把工具保持,
第十九章 组合模式
树的表示结果,树的字节点是一致的。不管是叶子节点还是组合对象节点,都看做是一致的。然后递归。不是数据结构,而是对现实中存在例子的抽象。节点中有一个数组看一下是否有子节点,然后再一层层的往里边添加。
第二十章 迭代器模式
遍历的一种模式,有迭代器和容器组成,迭代器得到容器类,并把容器类中的数组给找到,方法有下一个,第一个,是否完成遍历。 迭代器的初始化需要在容器中,迭代器和容器类的耦合度很高。所以在java中迭代器和集合是共生共死的,但在java中已经把迭代器都封装好了,不需要我们重新写了。
第二十一章 单例模式
既简单又复杂的一个模式,简单是因为在一个线程中只判断一下是否为空即可。复杂是因为在不同的线程中要考虑并发问题(饿汉,懒汉)。
第二十二章 桥接模式
合成/聚合原则:要比继承更早思考的原则。即在编程的时候,首先要想到合成/聚合,然后才是继承。
桥接模式就是从多角度对系统进行分类,然后把每一个角度分离出来让他们独立变化,减少他们之间的耦合。
第二十三章 命令模式
命令和接受者聚合,调用者调用命令。命令类中记录接受者,并有一个执行方法。调用者有一个设置命令的方法和调用命令的方法。
敏捷开发原则:不要为代码添加基于猜测的、实际不需要的功能。
第二十四章 职责链模式
将 if 或 switch 语句拆开,分成不同的类,一个一个的执行下去。代码和状态模式的代码很像,只不过状态模式的下一级很明确,而职责链模式的下一级需要手动去设置。
第二十五章 中介者模式
通过中介进行通话的模式,但中介必须稳定,不然整个系统就出问题了。
第二十六章 享元模式
需要共享类和共享容器(共享工厂),用的时候从共享容器中获得,在共享容器中判断共享对象存不存在,不存在时则新建并保存,然后返回。
第二十七章 解释器模式
解释文法的一种表示,根据不同的语法编写实现不同的解释器。选择合适的解释器解释特定的语句。
第二十八章 访问者模式
需要访问者和接收者,还有一个接收者管理类,接收访问者管理类负责保存接收者并让接收者接受访问者。接收者有一个接收访问者的方法(即该方法的形参中有访问者),访问者中有一个访问接收访问者的方法(即该方法的形参中有接收访问者)。我们以国事访问为例讲一下。英国总统要去访问美国的一些工厂,英国总统就是访问者,美国就是接收者管理类,美国的工厂就是被访问者。英国总统访问,首先要给美国总统说你们发展的不错,我要访问你们的一些工厂,然后美国方面就安排一些工厂,英国总统到美国之后,美国这个管理类说我们去参观工厂吧,其实在参观工厂的过程就是工厂接待英国总统,接待之后英国总统说我想去看一下你的某地方。这就完成了访问。
第二十九章 总结
创建型模式
抽象工厂模式
建造者模式(有公用的建造实现接口,建造实现接口的实现是不同的,建造流程类里的是建造实现接口)
工厂方法模式
原型模式
单例模式
结构型模式
适配器模式
桥接模式
组合模式
装饰模式
外观模式
享元模式
代理模式
行为型模式
观察者模式
模板方法模式
命令模式
状态模式
职责链模式
解释器模式
中介者模式
访问者模式
策略模式
备忘录模式
迭代器模式
设计原则:
单一职责
依赖倒转
里氏替换
合成聚合
开放封闭
迪米特法则
结束后的话:看这本书的收获并没有把这些模式能用到自己的代码中,不过我对面向对象有了更深的认识。还有一些大神说,看设计模式使你可以更好地理解设计原则,当你根据设计原则写代码时,设计模式就会自然而然的出来了,所以说设计原则是关键。
还有设计模式是被那些不断改需求的老板逼出来的玩意。
了解了设计模式,读大神的代码才会更轻松,就会明白代码为什么会设计该接口。
第一章 简单工厂模式
有不同的产品类,而工厂类去选择某一个产品类进行生产(初始化),即在工厂类中进行switch判断。
第二章 策略模式
在将策略类进行封装调用。
第三章 单一职责原则
每个类的职责是单一的。
第四章 开闭原则
对扩展开放,对修改闭合。(只允许添加类,不允许修改类)。
第五章 依赖倒转原则
抽象不依赖细节,细节依赖抽象。高层模块不依赖于低层模块,都依赖抽象。面向接口的编程。
里氏替换原则: 父类 = new 子类。 父类这时执行的是子类方法()。(多态)
第六章 装饰模式
super()方法的调用艺术。
第七章 代理模式
Android中ContextWrapper、ContextImpl、context之间的关系。
第八章 工厂方法模式
一个产品对应一个工厂,在工厂中新建产品。和简单工厂模式相比,使自己更符合开闭原则,但又把判断的压力交给客户端来进行。
第九章 原型模式
cloneable的调用,浅克隆与深克隆。浅克隆只在内存中复制当前类,当前类中的引用则不进行复制。深克隆则全部复制,但要注意克隆循环。
第十章 模板模式
只把变化提取出来做成抽象类,在子类中重写。Android中自己写的BaseActivity就是使用的模板模式。
第十一章 迪米特法则
减少public的使用,public使用的越少,代码的内聚就越高。只依赖需要依赖的类。
第十二章 外观模式
一个子系统比较复杂,如果调用里边的逻辑就会加大工作量,可能会把人搞疯,这时候做一个外观接口,只要调用这个接口就能实现你需要的功能,这就是外观接口的实现。
第十三章 建造者模式
流程不变,就是步骤永远是固定的具体步骤的实现是不一致的模式。
第十四章 观察者模式
被观察者记录下观察者(用一个数组保存好所有的观察者),当某件事发生时被观察者发出通知调用观察者的方法。还有当被调用的观察者的方法不一致时,就会用到事件委托,将观察者对象和方法保存起来。[b]方法的保存就用到了反射机制。
第十五章 抽象工厂模式
工厂方法模式是产品类和工厂类是一一对应的关系,当一产品还可以分类时,这时候就是也要把产品进行抽象处理,这时候就是抽象工厂模式了。现在的抽象工厂模式选择比较复杂,如果和简单模式一结合选择就简单了,但不是最优结果,如果用反射代替switch选择,工作量就会大大减少。
第十六章 状态模式
将一个长的 switch 或 if 判断给拆开,分成不同的类。这里讲的更清晰。
第十七章 适配器模式
方法的替换,替换成合适的方法。为特例找方法的一种模式,在编码中相当于亡羊补牢,不能盲目使用。
第十八章 备忘录模式
实现的是数据的一种缓存,缓存类只对应相应的数据类,在数据类中进行实例化,并把所有的public暴露给它。需要一个发起类,备忘录,管理类。发起类保存数据过程和接收数据,备忘录类是保存数据的工具,管理类把工具保持,
第十九章 组合模式
树的表示结果,树的字节点是一致的。不管是叶子节点还是组合对象节点,都看做是一致的。然后递归。不是数据结构,而是对现实中存在例子的抽象。节点中有一个数组看一下是否有子节点,然后再一层层的往里边添加。
第二十章 迭代器模式
遍历的一种模式,有迭代器和容器组成,迭代器得到容器类,并把容器类中的数组给找到,方法有下一个,第一个,是否完成遍历。 迭代器的初始化需要在容器中,迭代器和容器类的耦合度很高。所以在java中迭代器和集合是共生共死的,但在java中已经把迭代器都封装好了,不需要我们重新写了。
第二十一章 单例模式
既简单又复杂的一个模式,简单是因为在一个线程中只判断一下是否为空即可。复杂是因为在不同的线程中要考虑并发问题(饿汉,懒汉)。
第二十二章 桥接模式
合成/聚合原则:要比继承更早思考的原则。即在编程的时候,首先要想到合成/聚合,然后才是继承。
桥接模式就是从多角度对系统进行分类,然后把每一个角度分离出来让他们独立变化,减少他们之间的耦合。
第二十三章 命令模式
命令和接受者聚合,调用者调用命令。命令类中记录接受者,并有一个执行方法。调用者有一个设置命令的方法和调用命令的方法。
敏捷开发原则:不要为代码添加基于猜测的、实际不需要的功能。
第二十四章 职责链模式
将 if 或 switch 语句拆开,分成不同的类,一个一个的执行下去。代码和状态模式的代码很像,只不过状态模式的下一级很明确,而职责链模式的下一级需要手动去设置。
第二十五章 中介者模式
通过中介进行通话的模式,但中介必须稳定,不然整个系统就出问题了。
第二十六章 享元模式
需要共享类和共享容器(共享工厂),用的时候从共享容器中获得,在共享容器中判断共享对象存不存在,不存在时则新建并保存,然后返回。
第二十七章 解释器模式
解释文法的一种表示,根据不同的语法编写实现不同的解释器。选择合适的解释器解释特定的语句。
第二十八章 访问者模式
需要访问者和接收者,还有一个接收者管理类,接收访问者管理类负责保存接收者并让接收者接受访问者。接收者有一个接收访问者的方法(即该方法的形参中有访问者),访问者中有一个访问接收访问者的方法(即该方法的形参中有接收访问者)。我们以国事访问为例讲一下。英国总统要去访问美国的一些工厂,英国总统就是访问者,美国就是接收者管理类,美国的工厂就是被访问者。英国总统访问,首先要给美国总统说你们发展的不错,我要访问你们的一些工厂,然后美国方面就安排一些工厂,英国总统到美国之后,美国这个管理类说我们去参观工厂吧,其实在参观工厂的过程就是工厂接待英国总统,接待之后英国总统说我想去看一下你的某地方。这就完成了访问。
第二十九章 总结
创建型模式
抽象工厂模式
建造者模式(有公用的建造实现接口,建造实现接口的实现是不同的,建造流程类里的是建造实现接口)
工厂方法模式
原型模式
单例模式
结构型模式
适配器模式
桥接模式
组合模式
装饰模式
外观模式
享元模式
代理模式
行为型模式
观察者模式
模板方法模式
命令模式
状态模式
职责链模式
解释器模式
中介者模式
访问者模式
策略模式
备忘录模式
迭代器模式
设计原则:
单一职责
依赖倒转
里氏替换
合成聚合
开放封闭
迪米特法则
结束后的话:看这本书的收获并没有把这些模式能用到自己的代码中,不过我对面向对象有了更深的认识。还有一些大神说,看设计模式使你可以更好地理解设计原则,当你根据设计原则写代码时,设计模式就会自然而然的出来了,所以说设计原则是关键。
还有设计模式是被那些不断改需求的老板逼出来的玩意。
了解了设计模式,读大神的代码才会更轻松,就会明白代码为什么会设计该接口。
相关文章推荐
- iphone(ios开发)之23种设计模式简介
- GoF23种设计模式简介
- java设计模式简介(3)
- java设计模式简介(4)
- 设计模式简介
- 设计模式一:设计模式简介
- C++设计模式简介
- 设计模式简介(一)——Iterator
- 业务逻辑层的设计(四)——表模块模式简介
- 软件的架构与设计模式之经典架构模式简介
- 设计模式之抽象工厂模式简介及代码实现
- 设计模式简介
- 设计模式简介(转)
- 程序设计模式-“OPGA设计模式”简介
- 设计模式简介
- 设计模式学习(一)之设计模式简介
- 游戏设计常用模式简介
- JavaScript 设计模式之简介
- python设计模式之设计模式简介
- 设计模式简介(二)——Observer