1.先上代码
package lpq;
//抽象接口:描述真实角色和代理角色的共同接口
interface PenInterface{
void sellPen();
}
//实体类
class PenProduce implements PenInterface{
String customerName;
PenProduce(String name){
this.customerName=name;
}
public void sellPen(){
System.out.println("The pen is sold to "+this.customerName);
}
}
//代理类
class PenProxy implements PenInterface{
PenProduce penproduce;
PenProxy(String name){
penproduce=new PenProduce(name);
}
public void sellPen(){
penproduce.sellPen();
}
}
public class Customer {
public static void main(String[] args) {
// TODO Auto-generated method stub
PenProxy penproxy=new PenProxy("liupenqiang");
penproxy.sellPen();
}
}
其中包含三个角色
1)抽象角色:实体类和代理类的共同接口,其实是实体类对外的接口;
2)真实角色:即代码中的实体类,是我们最终操作的对象;
3)抽象角色:我们表面上操作的对象,其中包含了对真实角色的引用,另外可以包装一些对真实对象的操作
2.代理模式的好处:
1)可以在代理类中封装一些额外的附加操作,对系统做一些扩展;
3.使用场景
使用场景:
1)远程代理,也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。
2)虚拟代理,根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的对象。
3)安全代理,用来控制真实对象访问时的权限。
4)智能指引,当调用目标对象时,代理可以处理其他的一些操作。