1. 程式人生 > >代理模式( Proxy Pattern)

代理模式( Proxy Pattern)

切入故事: 我是遊戲至尊

定義: 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織入要深入理解。