静态代理模式

类图:
  
核心角色:
  抽象角色:定义代理结算和真实角色的公共对外方法;
  真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。真正的业务逻辑
  代理角色:实现抽象角色,是真实角色的代理,通过角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。
 
应用场景:
  安全代理:屏蔽对真实角色的直接访问。
  远程代理:通过代理类处理远程方法调用(RMI)
  延迟代理:先加载轻量级的代理对象,真正需要再加载真实对象
code:
抽象角色:
/**
 * ClassName: House<br/>
 * Description: 房子<br/>
 * date: 2018/12/26 11:08 AM<br/>
 *
 * @author chengluchao
 * @since JDK 1.8
 */

public interface House {
    /**
     * 地址
     */
    void address();

    /**
     * 房租
     */
    void rent();

    /***
     * 租期
     */
    void leaseTerm();
    /**
     * 房东
     */
    void landlord();
}

真实角色:

/**
 * ClassName: RealHouse<br/>
 * Description: 房东<br/>
 * date: 2018/12/26 11:14 AM<br/>
 *
 * @author chengluchao
 * @since JDK 1.8
 */

public class RealHouse implements House{
    @Override
    public void address() {
        System.out.println("北京市-东城区-长安街-1号院-1号楼-1单元-101");
    }

    @Override
    public void rent() {
        System.out.println("3000/月");
    }

    @Override
    public void leaseTerm() {
        System.out.println("2年");
    }

    @Override
    public void landlord() {
        System.out.println("王大户");
    }
}

代理角色:

/**
 * ClassName: ProxyHouse<br/>
 * Description: <br/>
 * date: 2018/12/26 11:19 AM<br/>
 *
 * @author chengluchao
 * @since JDK 1.8
 */

public class ProxyHouse implements House{
    private House house;

    public ProxyHouse(House house) {
        this.house = house;
    }

    @Override
    public void address() {
       house.address();
    }

    @Override
    public void rent() {
        System.out.println("9000/月");
    }

    @Override
    public void leaseTerm() {
        System.out.println("1年11个月");
    }

    @Override
    public void landlord() {
        System.out.println("X中介");
    }
}

测试类:

/**
 * ClassName: HouseTest<br/>
 * Description:测试类 <br/>
 * date: 2018/12/26 11:21 AM<br/>
 *
 * @author chengluchao
 * @since JDK 1.8
 */

public class HouseTest {
    public static void main(String[] args) {
        House real = new RealHouse();
        House porxy = new ProxyHouse(real);

        porxy.address();
        porxy.landlord();
        porxy.leaseTerm();
        porxy.rent();

    }
}

运行结果:

北京市-东城区-长安街-1号院-1号楼-1单元-101
X中介
1年11个月
9000/月

 
 
 
 
 
 
 
 
 
 
原文地址:https://www.cnblogs.com/chenglc/p/10178300.html