借图回顾Head first设计模式
总体原则
1、封装变化(找到会变化的地方,把它们从不变的地方分离处理)
2、多用组合少用继承
3、针对接口变成而非实现
4、松耦合
5、类对修改关闭,对扩展开放
6、依赖抽象而非具体类
7、只和朋友交谈(迪米特原则)
8、别找我,我会找你(好莱坞原则)
1.策略模式(strategy pattern)
-
多用组合,少用继承
所谓组合(composition)就是在一个类中,对其他类的引用.
比如,一个类中,有两个接口类型的引用。
设计原则:
2.观察者模式(observer pattern)
- 观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新
-
为了交互对象之间的松耦合设计,松耦合的设计之所以能让我们建议由弹性的OO系统,能够应对变化,是因为对象之间的互相依赖降到了最低
Java 本身也提供了观察者模式。
3.装饰者模式
- 装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案
用各种配料来修饰一杯饮料的例子:
java IO类 就是采用了这样的模式
4.工厂模式
简单工厂模式和工厂模式对比:
首先上简单工厂模式的代码:
其次上工厂模式的代码:
所以看了就知道,简单工厂模式在创建对象的时候已经把工厂传进去了,然后通过传进去的工厂创建对象,再对对象进行操作,而工厂模式,则没有将工厂传进去,而是一个框架,让子类去决定如何实现。想象一下,如果你是这个披萨店的老板(披萨店就是一个框架),客户只用告诉你要芝加哥和纽约的披萨,然后你告诉这两个国家的加盟店,他们怎么做你不关心,做好后,送到你手里,你再把这个披萨给客户.
5.单例模式
下面是经典的单线程单例模式
多线程的
考虑性能的话:
最佳单例模式:
单例模式和全局变量的比较:
6.命令模式
这个模式相对比较简单,就是对封装和组合的极致应用。
下面是headfirst给出的定义:
对于这个定义,读完后,基本感觉不深,还是看下面的生动例子,回头再来理解。
课表中举了一例子,一个家电万能的遥控器,每个按钮都可以配置化相应的功能,我们人去使用他,也就是给他下命令,然后一切从此说起….
下图中,每一个按钮背后都是一种 命令对象,而命令对象中持有具体接受命令的实体对象。
而我们要做的就是配置这两竖排的按钮,两个一位数组可以搞定。而数组的下标就对应图片中遥控器最左边的要控制的实体对象。
没有配置的,就按照出厂默认设置。
这里就引出了 空对象 (不是空指针)的设计概念,其实本质就是默认值。
下面这个就是之前定义所说的,可以引用于日志请求,或者事务系统。
7.适配器模式
-下面这个例子很生动的介绍了适配器模式-
对比下,之前的装饰着模式和未来的 外观模式
8.外观模式
8.模板模式
Java JDK中的 arrays.sort(object obj)方法就是应用了模板模式,传进来的obj对象所对应的类就需要实现compareTo()方法,作为排序的算法依据
9.迭代器模式和组合模式
10.状态模式
10.代理模式
持续更新中Ing….