借图回顾Head first设计模式

来源:互联网 发布:国外无限制视频软件 编辑:程序博客网 时间:2024/06/04 19:25

总体原则

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….

原创粉丝点击