设计模式Java实现(四)

桥梁模式(Bridge Pattern)

桥梁模式是使用频率不高的一种设计模式,但是是一种“威力”很大的模式。该模式的意图为“将抽象和实现解耦,各种的变化不影响对方”。这里的“抽象”和“实现”不是指传统意义上的父类与子类的关系,恰恰相反,该模式就是认为传统的父与子的继承关系太过耦合,相互的变化都会影响到彼此,为解决该问题,才提出的一种解决方案。

这里可以下载桥梁模式的Java实现版本。

如下是桥梁模式的UML类设计图:

设计模式Java实现(四)_第1张图片


不变模式(Immutable Pattern)

不变对象是指一旦一个对象被创建,那么它的状态将不会被改变。如果要改变一个对象的状态,那么必须重新实例化一个新的变量。不变对象由于内部状态不可改变,所以其天生就是线程安全的,所以不需要在多线程访问时,做同步和锁的限制,提高了系统的性能和健壮性。使用不变对象的做法,就叫做不变模式。不变模式只涉及到一个对象,并且在Java API中非常常见,我们经常使用的java.lang.String就是经典的不变模式实现。不变模式分为弱不变和强不变。

弱不变模式,即对象本身的状态不可变化,但其子类的状态可以发生变化。

要实现弱不变模式,只需做到如下几点即可:

1、不变对象的属性需要设置为私有的,不可被外界直接修改;

2、不变对象不对外提供setter方法,对象一旦构建,不能被外界通过setter方法进行修改;

3、如果不变对象引用了外界的另外一个可变对象,那么需要设法使该外界对象不被修改,可以的考虑的做法是,在实例化不变对象时,在初始化引用的外部可变对象时,将可变对象复制一份被不变对象引用;


强不变模式,即对象本身和其子类对象的状态都不可以发生变化。

要实现强不变模式,在做到弱不变模式的三点外,还需要保证让子类对象也不能被修改,可以的做法是:

1、将不变对象的方法定义为final,避免子类重写该不变对象的方法;

2、将不变对象本身定义为final,禁止不变对象被子类化。

由于不变对象的实现比较简单,这里不给出具体的实现和UML类图,可以参考java.lang.String的实现方式。


观察者模式(Observer Pattern)

观察者模式又被称为发布-订阅模式(Publishi-Subscribe),是对象的行为模式,其定义了一种一对多的依赖关系,让多个观察者对象同时监听一个主题对象,当主题对象的状态变化时,会通知所有观察者对象,让观察者对象能够自动更新自己。观察者模式是如此的常见,以至于Java语言直接提供了对该模式的支持。Java API中定义了java.util.Observer接口作为所有观察者对象的公共接口,该接口定义了一个update方法,以便观察者对象可以自动更新自己。另外定义了一个java.util.Observable类作为被观察者对象,即主题,所有的被观察者都是该类的子类对象。该类定义了两个很重要的方法,setChange()和notifyObservers(),前者设置对象状态方式变化的标识,后者将该变更通知到观察者对象。Java API实现的观察者模式有如下几个缺点:

1、java.util.Observer对象和java.util.Observable对象互相依赖了,其实可以去掉Observer对象对Observable对象的依赖;

2、java.util.Observable对象不应该定义为具体类,应该定义为接口。

Java版本的实现在这里可以下载

UML类图如下:

设计模式Java实现(四)_第2张图片


迭代模式(Iterator Pattern)

迭代模式又称为游标模式,迭代模式是对象的行为模式,迭代模式可以顺序的访问集合内的元素,而无需暴露集合的内部元素。Java语言框架也广泛的在集合(Collection)框架中使用该模式来遍历集合中的元素。具体的实现就是每一个类型的集合,都有一个相对应的iterator,通过该iterator可以向前或者先后顺序的遍历该集合里的元素。由于iterator pattern在Java API里面有广泛的实现,这里就不在给出类设计图和实现代码。


责任链模式(Chain of Responsibility Pattern)

责任链模式是对象的行为模式,在责任链模式里,对象引用下一个对象形成一条链,请求在该链条上传递,直到某一个链上的对象对其进行处理。对客户端来说,并不知道是链上的那个对象对其进行了处理,可以在不影响客户端的情况下,重新动态的组织和分配链的责任。具体的实现为,有一个抽象处理者对象,有一个具体处理者对象,具体处理者对象由应用一个抽象处理者对象,由此形成一个引用链条。

责任链模式的Java版本代码实现这里可以下载

UML类图设计如下:

设计模式Java实现(四)_第3张图片


命令模式(Command Pattern)

命令模式是对象的行为模式,命名模式把请求或操作封装在一个对象中。命令模式是对命令的封装,将调用者和执行者分开,实现调用者和执行者的解耦。同时由于命令可以保存命令的上一个状态,所以,命令模式可以很容易的实现Undo和Redo操作。

命令模式的Java版本实现可以在这里下载

命令模式的UML类图设计如下:

设计模式Java实现(四)_第4张图片






你可能感兴趣的:(java实现)