代理模式( Proxy Pattern)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_31638493/article/details/82982781

文档地址:《设计模式之禅》​​​​​​​

切入故事: 我是游戏至尊

定义: Provide a surrogate or placeholder for another object to control access to it.(为其他对象提供一种代理以控制对这个对象的访问。 )

通用类图:

        

             ● Subject抽象主题角色

                    抽象主题类可以是抽象类也可以是接口, 是一个最普通的业务类型定义, 无特殊要求。

             ● RealSubject具体主题角色

                    也叫做被委托角色、 被代理角色。 它才是冤大头, 是业务逻辑的具体执行者。

             ● Proxy代理主题角色

                    也叫做委托类、 代理类。 它负责对真实角色的应用, 把所有抽象主题类定义的方法限制委托给真实主题角色实现, 并且在真实主题角色处理完毕前后做预处理和善后处理工作。

优点:

        1: 职责清晰

        2: 高扩展性

        3: 智能化

使用场景:日志,事物等

扩展:

        普通代理: 普通代理就是场景类要知道代理的存在, 也就是类似的GamePlayerProxy这个类的存在

            

强制代理: 强制代理则是调用者直接调用真实角色, 而不用关心代理是否存在

            

 动态代理(重点): 动态代理是在实现阶段不用关心代理谁, 而在运行阶段才指定代理哪一个对象。

         实例:AOP,  Struts是如何把表单元素映射到对象上的

         类图:

                        

     调用过程:

                    

    注意: DynamicProxy 中的this.obj=Proxy.newProxyInstance(c.getClassLoader(),c.getInterfaces(),new MyInvocationHandler(_obj));

                   1:作用:创建一个对象

                  2:过程,c.getClassLoader() 对象的类加载器  c.getInterfaces() 查找该类的所有接口, 然后实现接口的所有方法。new MyInvocationHandler(_obj) 由InvocationHandler的实现类实现所有的方法, 由其invoke方法接管所有方法的实现

                 实现动态代理的首要条件是: 被代理类必须实现一个接口

            

个人总结:

    为其他对象提供一个代理,以控制对当前对象的访问。

    在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。

   理解AOP时,Aspect切面, JoinPoint切入点,Advice通知,Weave织入要深入理解。

猜你喜欢

转载自blog.csdn.net/qq_31638493/article/details/82982781