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();
        }
    }
     
  • 相关阅读:
    洛谷 P4317
    洛谷 P6218
    洛谷 P4999
    洛谷 P2657
    CSP 2020-S2 题解
    2020CSP-S2游记
    Spring Boot中使用WebSocket总结
    防盗链
    JVM JRE和JDK的区别和联系
    Java 注解学习
  • 原文地址:https://www.cnblogs.com/qull/p/6641943.html
Copyright © 2011-2022 走看看