美文网首页
Java学习笔记(8)-23种设计模式之代理模式

Java学习笔记(8)-23种设计模式之代理模式

作者: 非典型程序猿 | 来源:发表于2020-02-24 15:23 被阅读0次

    在总结完5种创建型模式之后,接下来开始总结结构型模式,而这篇文章就是总结第一种结构型模式,代理模式

    定义

    当我们在日常的开发过程中,由于某些原因需要给一个目标访问类提供一个中间类,来作为访问控制,作为访问目标类的媒介,这样的中间类称之为代理,代理可以对目标类起到一定的访问控制作用和保护作用,我们常见的代理模式框架就有Retrofit,其本质就是okhttp的代理类。

    结构

    • 抽象主题:也就是真正需要执行的业务逻辑代码
    • 真实的主题类:我们所真正访问的目标类中的业务逻辑方法
    • 代理类:实现控制访问和更多的业务逻辑控制

    示例

    public class MyTest{
        public static void main(String[] args) throws CloneNotSupportedException {
            Proxy proxy = new Proxy();
            proxy.method();
        }
        /**
         * 定义所需要访问的主题接口
         */
        interface Subject{
            void method();
        }
        /**
         * 定义真实的目标类
         */
        static class RealClass implements Subject{
            //真实目标类的访问方法
            @Override
            public void method() {
                System.out.println("访问到了真实的目标类的目标方法...");
            }
        }
        /**
         * 定义代理类
         */
        static class Proxy implements Subject{
            private RealClass realClass ;
            //开始执行代理类的方法
            @Override
            public void method() {
                System.out.println("开始访问代理类的方法...");
                if (realClass == null){
                    realClass = new RealClass();
                }
                preMethod();
                realClass.method();
                postMethod();
    
            }
        }
        private static void preMethod(){
            System.out.println("访问真实类之前执行的操作...");
        }
        private static void postMethod(){
            System.out.println("访问真实类完成之后的操作...");
        }
    }
    

    其执行结果为

    开始访问代理类的方法...
    访问真实类之前执行的操作...
    访问到了真实的目标类的目标方法...
    访问真实类完成之后的操作...
    

    我们可以看出我们在使用真正的目标类RealClass时,并没有直接访问其method()方法,而是通过一个代理类Proxy来实现的,并且实现了在访问目标之前和之后去执行相应的操作,我们可以通过这种方式来对访问真实目标类加以控制,以实现更多的需求。
    优缺点

    • 优点 :可以对真实的访问类起到保护作用
    • 缺点 :当我们需要新增加一个访问主题时,真实类和代理类都需要做对应的代码添加,比较麻烦。其次是代理模式所实现的方法,它必须要在真实目标类里存在,即代理类对真实类的依赖度过高,不易单独更改实现新的代理功能。
      今天的代理模式就给大家总结到这里啦,觉得有帮助记得点个赞~

    相关文章

      网友评论

          本文标题:Java学习笔记(8)-23种设计模式之代理模式

          本文链接:https://www.haomeiwen.com/subject/tnylqhtx.html