《Head First Design Pattern》读后感-----设计模式
2015-09-14 11:02
127 查看
命令模式:情景有餐馆点菜的女服务员,可以看成是利用该模式。具体例子:服务器请求队列,队列不知道每个请求是如何被执行和返回的,只知道将请求从队列中拿出并调用其执行方法execute()。
单例模式:全局共享一个单例对象,可以看该另一篇文章 最好的单例模式 。
策略模式:宗旨是多组合,少继承。情景:鸭子具有fly和quack的行为,但每种duck的fly和quack方式不一样,如果用实现接口方式,会导致每个duck都会有重复代码(毕竟有些鸭子的fly和quack的方式是一样的)。可以在duck中传入fly和quack的接口,由接口具体实现其行为,这样duck就不用负责fly和quack了。
工厂模式:由工厂决定具体产生哪一个子类。
观察者模式:让被观察者在状态改变时及时通知观察者。在android有许多观察者的例子,例如监听器等等。可以看另外一篇文章 观察者模式 。
装饰模式:不改变责任,但加入责任。书上的例子,请看下图
适配器模式:转换一个接口
外观模式:简化接口(同时做多件事),封装内部复杂的逻辑,让接口更简单,类似一键开启。但同时也对外提供直接访问内部其他接口的渠道
模板模式:定义一个算法的骨架,是一组步骤,部分步骤可由子类具体实现等。hook(钩子)的概念:允许子类实现算法中可选的部分,也可以置之不理(即使用默认实现方法)。该模式的例子有:例如数组的排序sort方法,内部已有具体排序的算法,被比较的东西只要实现compareTo方法即可。
迭代器模式:如果想要遍历arraylist和array,虽然遍历代码很像,但是还是不一样。可以使用iterator来解决该办法。
状态机模式:它与策略模式的区别------虽然都是委托对象来处理,但是状态机模式是内部自动处理状态转换,而策略模式是要外部自行处理如何动态转换对象,两者还是有差异的。
原则
最少知识原则(迪米特原则):不要与太多人说话,与自己关系最近的人说话。以免系统变得太复杂。
Keep it Simple(KISS原则):保持简单原则,致力选择最简单的办法,不一定要使用模式来解决问题。模式应该是自然而然的出现在你的代码中,而不是硬塞在其中。模式是在代码初始设计中和重构中用到的。
单例模式:全局共享一个单例对象,可以看该另一篇文章 最好的单例模式 。
策略模式:宗旨是多组合,少继承。情景:鸭子具有fly和quack的行为,但每种duck的fly和quack方式不一样,如果用实现接口方式,会导致每个duck都会有重复代码(毕竟有些鸭子的fly和quack的方式是一样的)。可以在duck中传入fly和quack的接口,由接口具体实现其行为,这样duck就不用负责fly和quack了。
工厂模式:由工厂决定具体产生哪一个子类。
观察者模式:让被观察者在状态改变时及时通知观察者。在android有许多观察者的例子,例如监听器等等。可以看另外一篇文章 观察者模式 。
装饰模式:不改变责任,但加入责任。书上的例子,请看下图
适配器模式:转换一个接口
外观模式:简化接口(同时做多件事),封装内部复杂的逻辑,让接口更简单,类似一键开启。但同时也对外提供直接访问内部其他接口的渠道
模板模式:定义一个算法的骨架,是一组步骤,部分步骤可由子类具体实现等。hook(钩子)的概念:允许子类实现算法中可选的部分,也可以置之不理(即使用默认实现方法)。该模式的例子有:例如数组的排序sort方法,内部已有具体排序的算法,被比较的东西只要实现compareTo方法即可。
迭代器模式:如果想要遍历arraylist和array,虽然遍历代码很像,但是还是不一样。可以使用iterator来解决该办法。
状态机模式:它与策略模式的区别------虽然都是委托对象来处理,但是状态机模式是内部自动处理状态转换,而策略模式是要外部自行处理如何动态转换对象,两者还是有差异的。
原则
最少知识原则(迪米特原则):不要与太多人说话,与自己关系最近的人说话。以免系统变得太复杂。
Keep it Simple(KISS原则):保持简单原则,致力选择最简单的办法,不一定要使用模式来解决问题。模式应该是自然而然的出现在你的代码中,而不是硬塞在其中。模式是在代码初始设计中和重构中用到的。
相关文章推荐
- scala中的构造器
- HTTP返回状态码合集
- ListView的优化
- UITextField使用总结
- POJ3619解题报告
- android AbsListView之ListView使用(1)
- erl_栈,队列
- 单例类
- ASM删除磁盘报错:ORA-15054: disk "ORCL:VOL2" does not exist in diskgroup "DATA"
- iis中如何添加处理程序映射
- 求1000阶乘的结果尾部0的个数
- 【网络】(八)I/O复用--Select(二)
- HTML 5 与HTML 4 的区别
- Eclipse的自动排版设置(format)
- typedef和define的详细区别
- android-自定义Dialog
- shell bash 脚本基本语法
- Android底层的学习经验介绍
- Ubuntu如何重新安装G++编译器
- UITableView+FDTemplateLayoutCell源码学习笔记