在后来,我们添加一个可以同时在网络存储上持久化数据的装饰器(具体装饰):
//装饰--存入网络其他地方public class PersistentNetDecorator extends PersistentDecorator { public PersistentNetDecorator(IPersistentUtil iPersistentUtil){ super(iPersistentUtil); } @Override public void persistentMsg(String msg) { iPersistentUtil.persistentMsg(msg); persistentToNet(msg); } private void persistentToNet(String msg){ System.out.println(msg " 存入网络的其他地方"); }}
接下来就是要使用并验证:
public class TestUse { public static void main(String args[]){ //被装饰者 final String data = "数据"; IPersistentUtil iPersistentUtil = new PersistentUtil(); iPersistentUtil.persistentMsg(data); System.out.println("下面装饰持久化:"); iPersistentUtil = new PersistentDbDecorator(iPersistentUtil); iPersistentUtil.persistentMsg(data); System.out.println("下面继续装饰网络存储器持久化:"); iPersistentUtil = new PersistentNetDecorator(iPersistentUtil); iPersistentUtil.persistentMsg(data); }}
控制台的输出:
数据 存入文件下面装饰持久化:数据 存入文件数据 存入下面继续装饰网络存储器持久化:数据 存入文件数据 存入数据 存入网络的其他地方
可以看到,使用了装饰器的对象,功能已经增强了,而且可以使用多个装饰器。
在Java.io包中,很多类的设计,都用到了装饰器模式(如Reader相当于抽象的被装饰者,FileReader相当于具体的被装饰者,BufferedReader相当于装饰),有兴趣的同学可以去看看源码。
总结
好了,至此,23种设计模式在Java中的应用就介绍完了。
写代码不能太死板(这是必须的),就像上面的设计模式,我们也不能就非得完全按照其介绍的那么做,很多时候需要变通。比如单例模式,我们可以利用类的原理,不让对象不受控制的创建,而是以我们预期的数量,也就是可控的多个实例,这显然是不符合单例模式的描述的,但这样做有时候确实是有好处。
很多模式之间是有很多相之处的,实现上稍作修改,就变成了另外一种模式。模式也不能滥用,只是在我们设计的时候,给出一种引导,以某种方式实现需求,可能会更加简单,方便,容易维护。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-33893-47.html
由于信息情报获取的能力的不足
成天都在更新