代理模式和装饰模式非常相像,还是以装饰模式的理解 中的例子进行
略微修改:
public class Version3Class1Proxy implements Version3 {
private Version3 version3;
public Version3Class1Proxy() {
super();
this.version3 = new Version3Class(new Version2Class1());
}
@Override
public void fee() {
beforeLog();
version3.fee();
afterLog();
}
@Override
public void foo() {
beforeLog();
version3.foo();
afterLog();
}
@Override
public void fcc() {
beforeLog();
version3.fcc();
afterLog();
}
private void beforeLog() {
}
private void afterLog() {
}
}
public class Version3Class2Proxy implements Version3 {
private Version3 version3;
public Version3Class2Proxy() {
super();
this.version3 = new Version3Class(new Version2Class2());
}
@Override
public void fee() {
version3.fee();
}
@Override
public void foo() {
version3.foo();
}
@Override
public void fcc() {
version3.fcc();
}
}
和装饰模式的略微区别是其代理对象是固定的,而装饰模式可装饰的类并不需要固定。从语义上来说,代理模式是提供一个替代代替的类用以控制对这个对象的访问,调用方可以不需要知道真实类是哪个,而是通过中间代理对象来调用。极易与装饰模式混淆
适配器模式更多的是为了扩展或改变接口方法;而装饰模式只是对接口方法进行增强,并不会扩展或改变接口方法;代理模式可以对接口方法进行增强,但也可以不进行增强,与装饰模式相比更侧重于访问控制,通过代理对象进行访问