什么是代理模式?
定义:某个对象为别的对象提供一种代理以提供对自身的访问。
//具体功能抽象类
public interface GiveGift {
String sendFlowers();
void sendChocolate();
void sendDolls();
}
//被代理的对象 ,具体功能实现类
public class Prusuit implements GiveGift{
Girl girl;
public Prusuit(Girl girl){
this.girl=girl;
}
@Override
public String sendFlowers() {
System.out.println("送花给:"+girl.getName());
return "flowerws";
}
@Override
public void sendChocolate() {
System.out.println("送巧克力给:"+girl.getName());
}
@Override
public void sendDolls() {
System.out.println("送洋娃娃给:"+girl.getName());
}
}
//代理类,代理Prusuit的功能
public class Proxy implements GiveGift{
Prusuit prusit;
public Proxy(Girl girl){
prusit=new Prusuit(girl);
}
@Override
public String sendFlowers() {
// TODO Auto-generated method stub
prusit.sendFlowers();
return "flowerproxy";
}
@Override
public void sendChocolate() {
// TODO Auto-generated method stub
prusit.sendChocolate();
}
@Override
public void sendDolls() {
// TODO Auto-generated method stub
prusit.sendDolls();
}
}
//需要的实体类
public class Girl {
String name;
public Girl(String name) {
// TODO Auto-generated constructor stub
this.name=name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
//客户端
public class Client {
public static void main(String[] args) {
Girl girl=new Girl("程程");
girl.setName("程程");
Proxy proxy=new Proxy(girl);
proxy.sendChocolate();
proxy.sendDolls();
proxy.sendFlowers();
}
}
代理模式解决了什么问题?
1)安全代理,可以将被代理对象与实际的调用类隔离开来,防止出现问题
2)虚拟代理,代理类中提前创建了对象,减少被代理对象的实例化时间