zoukankan      html  css  js  c++  java
  • 静态代理模式

    类图:
      
    核心角色:
      抽象角色:定义代理结算和真实角色的公共对外方法;
      真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。真正的业务逻辑
      代理角色:实现抽象角色,是真实角色的代理,通过角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。
     
    应用场景:
      安全代理:屏蔽对真实角色的直接访问。
      远程代理:通过代理类处理远程方法调用(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/月

     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    功能规格说明书
    绝望的作业
    php闭包
    php isset emtpy
    PHP超级全局变量、魔术变量和魔术函数
    死锁的一个例子
    php session cookie
    http状态码301、302
    php浮点数
    学过的设计模式
  • 原文地址:https://www.cnblogs.com/chenglc/p/10178300.html
Copyright © 2011-2022 走看看