Java设计模式之结构型模式-代理模式(Proxy)

  “代理”即代表其进行某种活动。在日常生活中,“代理”随处可见。微商有微商的代理,买火车票也有代售点等等。

代理模式: 为其他对象提供一种代理用来控制对这个对象的访问

三个要素

  1. Subject: 是RealSubject和Proxy的公共接口,可以在任何使用RealSubject的地方使用Proxy
  2. RealSubject: 具体的所要被代理的对象,是Proxy所要代表的实体类
  3. Proxy: 代理类,保存所要访问实体的引用,并且提供相同的接口

示例

  以去代售点买火车票为例。原本我们买车票直接去火车站购买,现在出来代售点来代表火车站进行售票活动。

实现过程

   1. 创建代理接口 Station

public interface Station {
    void buy();
}

  2. 创建具体的被代理的对象类 RealStation

public class RealStation implements Station {

    private String start;

    private String end;

    public RealStation(String start, String end) {
        this.start = start;
        this.end = end;
    }

    @Override
    public void buy() {
        System.out.println("===== 开始执行被代理对象方法 =====");
        System.out.println("买了一张从 " + start + " 到 " + end + " 的火车票");
    }

}

  3. 创建代理对象类 Agent

public class Agent implements Station {

    private RealStation realStation;

    private String start;

    private String end;

    public Agent(String start, String end) {
        this.start = start;
        this.end = end;
    }

    @Override
    public void buy() {
        System.out.println("===== 开始执行代理对象方法 =====");
        if (realStation == null) {
            realStation = new RealStation(start, end);
        }
        realStation.buy();
    }

}

  4. 创建代理测试类 ProxyTest 测试下

public class ProxyTest {
    public static void main(String[] args) {
        Station station = new Agent("诸暨", "杭州");

        station.buy();
    }
}

运行的结果如下:

===== 开始执行代理对象方法 =====
===== 开始执行被代理对象方法 =====
买了一张从 诸暨 到 杭州 的火车票

你可能感兴趣的:(设计模式)