一、观察者模式
1、定义:观察者模式定义了对象的一对多依赖,这样一来,当一个对象状态改变状态时,它的所有依赖者都会收到通知并且自动更新。
实现观察者模式的方式很多,但以包含Subject(主题)与Observer(观察者)接口类的设计最常见。
2、类图:
3、松耦合:观察者模式提供了一种对象设计,让主题和观察者之间松耦合。当两个对象松耦合时,它们依然可以交互,但是不太清楚彼此实现的细节。松耦合的设计能够让我们建立有弹性的OO系统,更好的应对变化。因为它把对象之间的依赖降到了最低。
4、JDK中的实现:1)Swing JButton;2)Java.util.Obervable
二、装饰者模式
1、开放——关闭原则(open-closed):类应该对扩展开放,对修改关闭。
2、装饰者模式定义:装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。
3、注意:1)装饰者和被装饰者具有相同的超类型;2)可以用一个或多个装饰者包装一个对象;3)装饰者和被装饰者具有相同的超类型,所以在任何需要原始对象(被包装的)场合,可以用装饰过的对象代替它;4)对象可以在任何时候被装饰,所以可以在运行时动态地、不限量地用你喜欢的装饰者装饰对象;5)装饰者可以在所委托被装饰者的行为之前与/或之后,加上自己的行为,以达到特定的目的。
4、类图:
5、JDK中的应用:Java I/O。
可以看出,装饰者有一个不太好的地方,它常常会造成设计中有大量的小类,可能会造成使用此API的程序员的困扰。
三、工厂方法模式
(对于简单工厂和工厂方法的区分,有点模糊)
工厂方法模式
1、工厂方法模式定义:工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。
2、类图:
3、特点:共产方法让子类决定要实例化的类是哪一个,即在编写创建者类时,不需要知道实际创建的产品是哪一个。工厂方法模式将产品的“实现”从“使用”中解耦,对于增加或者改变具体的产品,Creator都不会受到影响。
4、好处:1)将创建对象的代码集中在一个对象或方法中,可以避免代码的重复,并且方便维护;2)客户在实例化对象时,只会依赖于接口,而非具体类,符合依赖倒置原则;3)让代码更具有弹性,便于以后的拓展。
依赖倒置原则(DI):要依赖抽象,不要依赖具体类。