• 代理模式(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();
    
        }
    }
    
    
    • 输出如下:

    以上
    希望对大家有所帮助

  • 相关阅读:
    cbitmap 获取RGB
    存稿
    VC单选按钮控件(Radio Button)用法(转)
    MFC文档视图中窗口切换 (2012-05-11 18:32:48)
    MFC 结束线程
    vs2010调试运行时弹出对话框:系统找不到指定文件
    fatal error C1189: #error : This file requires _WIN32_WINNT to be #defined at least to 0x0403. Value 0x0501 or higher is recommended.
    自定义消息
    数据分析与可视化--matplotlib
    数据分析与可视化--pandas
  • 原文地址:https://www.cnblogs.com/lavender-pansy/p/14301735.html
走看看 - 开发者的网上家园