代理模式简介
定义
代理模式又称之为委托模式,是为其他对象提供一种代理以控制对这个对象的方法。
类似于中介的性质,在实现中比如相亲,联系到媒婆才有对象可相、海外代购、委托黄牛抢票……
UML结构图
- Subject:抽象主题类,声明定义真实主题类和代理类共同方法的接口。
- RealSubject:真实主题类,实现了Subject接口,代理类所代表的真实主题。
- Proxy:代理类,持有真实主题类的引用,同样的实现了Subject接口,并在接口方法中RealSubject真实主题类调用了相应的方法。
代理模式的简单实现
比如苹果公司刚发布了iPhone 20,内地暂时未上线,于是要托人去香港代购。
我托人去香港代购。
我:真实主题类
托人(中介黄牛):代理类
我和中介都有共同的行为,购买,于是可以比作抽象接口类。
具体代码实现
1、定义一个抽象主题接口类,(我和中介)共同的行为就是购买
/**
*
* @author 13480
*抽象主题类
*/
public interface IShop {
void buy();
}
2、定义真实具体主题类(我),具有购买行为,自然要实现IShop接口了。具体业务都在真实主题类中实现。
public class HZWei implements IShop{
@Override
public void buy() {
//实现整体的逻辑
System.out.println("在购买的路上");
}
}
3、定义代理类(中介),也具有购买行为,同样也要实现Ishop接口,于此同时,还具有真实主题类(HZWei )的引用并在buy方法实现了购买行为,只有带有真实购买者的要求才会去香港代购嘛。
public class LaoWuProxy implements IShop{
//使用多态,使用程序的扩展
private IShop mIShop;
public void setmIShop(IShop mIShop) {
this.mIShop = mIShop;
}
@Override
public void buy() {
mIShop.buy();
}
}
4、使用者调用(Client)
public class Test {
public static void main(String[] args) {
LaoWuProxy laoWuProxy = new LaoWuProxy();
IShop hzWei = new HZWei();
laoWuProxy.setmIShop(hzWei);
laoWuProxy.buy();
}
}
以上四个步骤就是代理模式的简单实现,最后输出的结果是在购买的路上
优缺点
优点:具有很好同类性质的本地扩展性,可以用代码来体现:
比如有一个人有同样的需求,需要一部IPhone 20。
public class LiHua extends HZWei{
@Override
public void buy() {
super.buy();
System.out.println("除了要购买IPhone 20,还要mac……");
}
}
public class Test {
public static void main(String[] args) {
LaoWuProxy laoWuProxy = new LaoWuProxy();
IShop hzWei = new HZWei();
laoWuProxy.setmIShop(hzWei);
laoWuProxy.buy();
IShop liHua = new LiHua();
laoWuProxy.setmIShop(liHua);
laoWuProxy.buy();
}
}