zoukankan      html  css  js  c++  java
  • 代理模式(Proxy)_java实现

    //20210120
    写在前面:刚期末考试完,考了面向对象,里边儿有23个设计模式,我寻思着考完挨个儿实现一下,本文实现适代理模式

    核心思想

    • 创建一个代理类来面对客户,而非委托方直接面对客户,代理类对客户类为一对一,代理类可以在委托类基础上附加额外功能,但是主要业务工作哦还是交给委托方,只不过科普不会直接接触到委托方

    程序源代码如下:

    静态代理:

    //买房接口
    public interface BuyHouse {
        void buyHouse();
    }
    
    
    //委托方(买房接口实现类)
    public class BuyHouseImpl implements BuyHouse{
        @Override
        public void buyHouse() {
            System.out.println("我要买房");
        }
    }
    
    
    //代理方(买房接口实现类)
    /**
     * 将主要业务交给委托方,代理类面向客户以及附加额外功能
     */
    public class BuyHouseProxy implements BuyHouse{
    
        private BuyHouse buyHouse;
    
        public BuyHouseProxy(final BuyHouse buyHouse){
            this.buyHouse = buyHouse;
        }
    
        @Override
        public void buyHouse() {
            System.out.println("买房前准备");
            buyHouse.buyHouse();
            System.out.println("买房后装修");
        }
    }
    
    

    动态代理:

    • 使用JDK自带代理接口
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    
    public class DynamicProxyHandler implements InvocationHandler {
        private Object object;
    
        public DynamicProxyHandler(final Object object){
            this.object = object;
        }
    
        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            System.out.println("买房前准备");
            Object result = method.invoke(object,args);
            System.out.println("买房后装修");
            return result;
        }
    
    }
    
    //测试主类
    
    import java.lang.reflect.Proxy;
    
    public class Main {
        public static void main(String[] args) {
            //静态代理
            BuyHouse buyHouse = new BuyHouseImpl();
            System.out.println("测试委托方原有功能:");
            buyHouse.buyHouse();
    
            BuyHouse buyHouseProxy = new BuyHouseProxy(buyHouse);
            System.out.println("
    测试代理方功能:");
            buyHouseProxy.buyHouse();
    
            //使用JDK中自带动态代理接口
            BuyHouse buyHouse_1 = new BuyHouseImpl();
            BuyHouse proxyBuyHouse = (BuyHouse) Proxy.newProxyInstance(BuyHouse.class.getClassLoader(),
                    new Class[]{BuyHouse.class},
                    new DynamicProxyHandler(buyHouse_1));
            proxyBuyHouse.buyHouse();
    
        }
    }
    
    
    • 输出如下:

    以上
    希望对大家有所帮助

  • 相关阅读:
    video 自动循环播放
    C. Kefa and Park
    B. Random Teams(数学题)
    B. Books(水题)
    dd爱科学1.0(牛客)
    B. WeirdSort
    B. The Cake Is a Lie
    优先队列 priority_queue
    C. A-B Palindrome
    B. Fedor and New Game(位运算)
  • 原文地址:https://www.cnblogs.com/lavender-pansy/p/14301735.html
Copyright © 2011-2022 走看看