设计模式学习 - 代理模式

代理模式简介

定义

代理模式又称之为委托模式,是为其他对象提供一种代理以控制对这个对象的方法。
类似于中介的性质,在实现中比如相亲,联系到媒婆才有对象可相、海外代购、委托黄牛抢票……

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();

    }

}

猜你喜欢

转载自blog.csdn.net/hzw2017/article/details/80782765
今日推荐