模式定义:
模式结构:
代码模式.png
不画图了,就是 一个接口,两个实现A,B。A是代理证,B是真正实现,,A内有一个B的引用。在调用A时,其实是调用B。和适配器模式差不多,只不过这个父类相同。
不画图了,就是 一个接口,两个实现A,B。A是代理证,B是真正实现,,A内有一个B的引用。在调用A时,其实是调用B。和适配器模式差不多,只不过这个父类相同。
模式实现:
public class ProxyPattern {
@Test
public void testProxy() {
Proxy proxy = new Proxy();
proxy.sell("lv");
proxy.sell("gun");
proxy.sell("iPhone8");
}
/**
* 商家接口
*/
interface ISeller {
void sell(String name);
}
/**
* 香港某个商城
*/
class HongKong implements ISeller {
@Override
public void sell(String name) {
System.out.println("sell " + name);
}
}
/**
* 代购
*/
class Proxy implements ISeller {
private ISeller iSeller;
public Proxy() {
iSeller = new HongKong();
}
@Override
public void sell(String name) {
if ("iPhone8".equals(name)) {
System.out.println("no this");
} else if ("gun".equals(name)) {
System.out.println("no permission");
} else {
iSeller.sell(name);
}
}
}
}
模式优点:
1、代理模式能够协调调用者和被调用者,在一定程度上降低了系统的耦合度
2、代理对象可以在客户端和目标对象之间起到中介的作用,起到了保护目标对象的作用
模式缺点:
1、由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢
2、实现代理模式需要额外的工作,有些代理模式的实现非常复杂
适用场景:
1、远程代理:为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实
2、虚拟代理:通过使用过一个小的对象代理一个大对象。这样就可以减少系统的开销
3、保护代理:用来控制对真实对象的访问权限