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

    静态代理实现

    package proxy.staticproxy;
    
    public interface Start {
    
        //面谈
        void confer();
        //签合同
        void singContract();
        //定票
        void bookTicket();
        //唱歌
        void sing();
        //收钱
        void collectMoney();
    }
    package proxy.staticproxy;
    
    public class RealStar implements Start {
    
        @Override
        public void confer() {
            System.out.println("realStar confer");
            
        }
    
        @Override
        public void singContract() {
            System.out.println("realStar csingContractonfer");
            
        }
    
        @Override
        public void bookTicket() {
            System.out.println("realStar bookTicket");
            
        }
    
        @Override
        public void sing() {
            System.out.println("realStar sing");
            
        }
    
        @Override
        public void collectMoney() {
            System.out.println("realStar collectMoney");
            
        }
    
    }
    package proxy.staticproxy;
    
    public class ProxyStar implements Start {
        private Start star;
        public ProxyStar(Start star) {
            this.star = star;
        }
        @Override
        public void confer() {
            System.out.println("ProxyStar confer");
    
        }
        
    
        @Override
        public void singContract() {
            System.out.println("ProxyStar singContract");
    
        }
    
        @Override
        public void bookTicket() {
            System.out.println("ProxyStar bookTicket");
    
        }
    
        @Override
        public void sing() {
            star.sing();
        }
    
        @Override
        public void collectMoney() {
            System.out.println("ProxyStar collectMoney");
    
        }
    
    }
    package proxy.staticproxy;
    
    public class Client {
        public static void main(String[] args) {
            Start real = new RealStar();
            
            Start proxy = new ProxyStar(real);
            proxy.confer();
            proxy.singContract();
            proxy.bookTicket();
            proxy.sing();
            proxy.collectMoney();
        }
    }



    动态代理
    package proxy.dynamitProxy;
    
    public interface Start {
    
        //面谈
        void confer();
        //签合同
        void singContract();
        //定票
        void bookTicket();
        //唱歌
        void sing();
        //收钱
        void collectMoney();
    }
    
    
    package proxy.dynamitProxy;
    
    public class RealStar implements Start {
    
        @Override
        public void confer() {
            System.out.println("realStar confer");
            
        }
    
        @Override
        public void singContract() {
            System.out.println("realStar csingContractonfer");
            
        }
    
        @Override
        public void bookTicket() {
            System.out.println("realStar bookTicket");
            
        }
    
        @Override
        public void sing() {
            System.out.println("realStar sing");
            
        }
    
        @Override
        public void collectMoney() {
            System.out.println("realStar collectMoney");
            
        }
    
    }
    package proxy.dynamitProxy;
    
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    
    public class StartHander implements InvocationHandler{
    
        Start realStart;
        
        public StartHander(Start realStart) {
            super();
            this.realStart = realStart;
        }
    
        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            Object invoke = null;
            System.out.println("真正的方法执行前");
            System.out.println("面谈、签合同、订机票、预付款");
            if(method.getName().equals("sing")){
                invoke = method.invoke(realStart, args);//激活方法
            }
            return invoke;
        }
    
    }
    package proxy.dynamitProxy;
    
    import java.lang.reflect.Proxy;
    
    public class Client {
        public static void main(String[] args) {
            Start realStart = new RealStar();
            StartHander hander = new StartHander(realStart);
            Start proxy =(Start)Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(), new Class[]{Start.class}, hander);
            proxy.bookTicket();
            proxy.sing();
        }
    }
     
  • 相关阅读:
    Python爬虫一
    Python爬虫二
    DRF框架中的演变View
    计算时间复杂度例题
    vue2.x webpack打包资源路径问题
    vs code运行c语言 控制台乱码 问题
    解决视频的声音和画面不同步问题
    c语言数据结构,静态链表,结构体数组
    swagger @ApiModel添加实体类不生效
    计算及校验海明码的3个举例
  • 原文地址:https://www.cnblogs.com/qull/p/6641943.html
Copyright © 2011-2022 走看看