zoukankan      html  css  js  c++  java
  • 设计模式之代理模式 Proxy

    定义与模型

    应用场景和分类

    代码实现

    staticProxy
    静态代理
    public interface Star {
    
        /**
         * 面谈
         */
        void confer();
        /**
         * 签合同
         */
        void signContract();
        /**
         * 订票
         */
        void bookTicket();
        /**
         * 唱歌
         */
        void sing();
        /**
         * 收钱
         */
        void collectMoney();
        
    }
    抽象角色
    public class RealStar implements Star{
        
    
        @Override
        public void confer() {
            System.out.println("真实角色面谈");
        }
    
        @Override
        public void signContract() {
            System.out.println("真实角色签合同");
        }
    
        @Override
        public void bookTicket() {
            System.out.println("真实角色订票");
        }
    
        @Override
        public void sing() {
            System.out.println("真实角色唱歌");
        }
    
        @Override
        public void collectMoney() {
            System.out.println("真实角色收钱");
        }
    
    }
    真实角色
    public class ProxyStar implements Star{
    
        private Star star;
            
        public ProxyStar(Star star) {
            super();
            this.star = star;
        }
    
        @Override
        public void confer() {
            System.out.println("代理角色面谈");
        }
    
        @Override
        public void signContract() {
            System.out.println("代理角色签合同");
        }
    
        @Override
        public void bookTicket() {
            System.out.println("代理角色订票");
        }
    
        @Override
        public void sing() {
            star.sing(); //代理角色不能唱歌
        }
    
        @Override
        public void collectMoney() {
            System.out.println("代理角色收钱");
        }
    
    }
    代理角色
    public class Client {
    
        public static void main(String[] args) {
            Star real = new RealStar();
            Star proxy = new ProxyStar(real);
            
            proxy.confer();
            proxy.signContract();
            proxy.bookTicket();
            proxy.sing();
            
            proxy.collectMoney();
        }
    }
    调用
    dynamicProxy
    动态代理
    public interface Star {
    
        /**
         * 面谈
         */
        void confer();
        /**
         * 签合同
         */
        void signContract();
        /**
         * 订票
         */
        void bookTicket();
        /**
         * 唱歌
         */
        void sing();
        /**
         * 收钱
         */
        void collectMoney();
        
    }
    抽象角色
    public class RealStar implements Star{
        
    
        @Override
        public void confer() {
            System.out.println("真实角色面谈");
        }
    
        @Override
        public void signContract() {
            System.out.println("真实角色签合同");
        }
    
        @Override
        public void bookTicket() {
            System.out.println("真实角色订票");
        }
    
        @Override
        public void sing() {
            System.out.println("真实角色唱歌");
        }
    
        @Override
        public void collectMoney() {
            System.out.println("真实角色收钱");
        }
    
    }
    真实角色
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    
    public class StarHandler implements InvocationHandler{
    
        Star realStar;
        
        public StarHandler(Star realStar) {
            super();
            this.realStar = realStar;
        }
    
        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            //System.out.println("****查看调用过程*****"); //Client调用的时候经过这里
            
            Object object = null;
            
            System.out.println("真正的方法执行前,面谈,签合同,订票");
            if(method.getName().equals("sing")){
                object = method.invoke(realStar, args);
            }
            System.out.println("真正的方法执行后,收钱");
            return object;
        }
    
    }
    代理处理器
    public class Client {
    
        public static void main(String[] args) {
            Star realStar = new RealStar();
            StarHandler handler = new StarHandler(realStar);
            
            Star proxy = (Star) Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(), new Class[]{Star.class}, handler);
            
            proxy.bookTicket();
            proxy.sing();
    
        }
    
    }
    调用

     推荐博客

    http://blog.csdn.net/rock_ray/article/details/22491763

  • 相关阅读:
    formValidator表单验证
    js中判断一个对象的类型的种种方法
    利用jQuery中的serialize方法大量获取页面中表单的数据,发送的服务器
    用html和css写一个头部header和左侧菜单栏menu-bar固定的的页面
    关于刚才那个全选问题的解决
    关于input[type='checkbox']全选的问题
    用CSS来定义<p>标签,要求实现以下效果:字体颜色再IE6下为黑色,IE7下为红色,IE8下为绿色,其他浏览器下为黄色。
    Vue.js(20)之 封装字母表(是这个名字吗0.0)
    Vue.js之calendar组件
    书:构造器模式
  • 原文地址:https://www.cnblogs.com/qingdaofu/p/7472844.html
Copyright © 2011-2022 走看看