黑马程序员技术交流社区
标题:
适配器与代理
[打印本页]
作者:
Synaric
时间:
2015-9-30 08:33
标题:
适配器与代理
关于设计模式,我自己也没怎么搞明白,根据书写了个例子,说说我的理解
//类库代码(即别人写的,不可修改)
class WaveForm{
private static long counter;
private final long id = counter++;
public String toString(){
return "WaveForm id: " + id;
}
}
//类库代码,处理WaveForm
class Fliter{
public String name(){
return getClass().getSimpleName();
}
//和我们的接口微妙不同
public WaveForm process(WaveForm input){
return input;
}
}
//很遗憾BOSS告诉你我们的代码必须遵照这个接口
interface Processor {
String name();
Object process(Object obj);
}
//Fliter是别人写的,我们无法修改,所以使用适配器
//适配器,将Fliter接口适配
class FliterAdapter implements Processor{
//持有一个fliter
private Fliter fliter;
private int count;
public FliterAdapter(Fliter fliter) {
this.fliter = fliter;
}
@Override
public String name() {
return fliter.name();
}
@Override
public Object process(Object obj) {
//我们可以统计fliter.process被调用次数
++count;
System.out.println("fliter.process count: " + count);
//现在接口终于匹配了
return fliter.process((WaveForm)obj);
}
}
public class Apply{
public static void process(Processor p, Object obj){
System.out.println("Process: " + p.name());
System.out.println(p.process(obj));
}
public static void main(String[] args) {
process(new FliterAdapter(new Fliter()), new WaveForm());
}
}
复制代码
适配器模式和代理模式写法差不多。在这个例子,是适配器和代理混用。不过,区别还是有的:
适配器模式:它的主要意图是将接口A适配到接口B上,也就是解决借口不匹配。
代理模式:它的主要意图是分离代码。通常,代理类(proxy)会实现和被代理对象相同的接口。代理还可以做一些额外的事情(比如统计代理对象的某个方法被调用次数、或者进行安全检查)。
作者:
a6883767
时间:
2015-9-30 08:45
不错!学习了!加油!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2