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

  • 相关阅读:
    1062 Talent and Virtue (25 分)
    1083 List Grades (25 分)
    1149 Dangerous Goods Packaging (25 分)
    1121 Damn Single (25 分)
    1120 Friend Numbers (20 分)
    1084 Broken Keyboard (20 分)
    1092 To Buy or Not to Buy (20 分)
    数组与链表
    二叉树
    时间复杂度与空间复杂度
  • 原文地址:https://www.cnblogs.com/qingdaofu/p/7472844.html
Copyright © 2011-2022 走看看