控制台输出:
folder:rootfolder:javafile:info.javafolder:cfolder:c#file:info.txt
输出与我们预期想得到的迭代器是一样的(从某一个目录开始,先输出目录名,然后如果有目录,就递归进入下一级目录,如果没有目录,就输出文件列表)。
文件和目录(Composite和Leaf)实现了相同的接口,所以操作起来很方便,包括迭代。
19、代理模式(Proxy Pattern)
Provide a surrogate or placeholder for another object to control access to it.
为其它对象提供一种代理以控制对这个对象的访问。
何时使用:
程序可能不希望用户直接访问该对象,而是提供一个特殊的对象以控制对当前对象的访问。 如果一个对象(例如很大的图像)需要很长时间才能完成加载。 如果对象位于远程主机上,需要为用户提供访问该远程对象的能力。
优点:
代理模式可以屏蔽用户真正请求的对象,是用户程序和正在的对象解耦。 使用代理来担当那些创建耗时的对象的替身。
一个用户不想或者不能够直接引用一个对象(或者设计者不希望用户直接访问该对象),而代理对象可以在客户端和目标对象之间起到中介的作用。而且这个代理对象中,我们可以做更多的操作。
代理模式实现其实很简单。下面直接用代码演示其实现:
抽象对象:
//抽象对象public intece AbstractObject { void method1(); int method2(); void method3();}
具体对象:
//具体对象public class TargetObject implements AbstractObject { @Override public void method1() { System.out.println("具体对象的方法1"); } @Override public int method2() { System.out.println("具体对象的方法2"); return 0; } @Override public void method3() { System.out.println("具体对象的方法3"); }}
代理对象:
//代理对象public class ProxyObject implements AbstractObject { AbstractObject object = new TargetObject(); @Override public void method1() { object.method1(); } @Override public int method2() { return object.method2(); } @Override public void method3() { System.out.println("调用目标对象前的操作"); object.method3(); System.out.println("调用目标对象后的操作"); }}
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-33893-38.html
首先是判明其意图和性质
说明你开始走下坡路了
是谁在搞
美国佬在叙利亚被普京把了脸跑到南海来撒野