<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                12.2 代理模式的定義 代理模式(Proxy Pattern)是一個使用率非常高的模式,其定義如下: Provide a surrogate or placeholder for another object to control access to it.(為其他對象提供一種代理以控制對這個對象的訪問。) 代理模式的通用類圖如圖12-3所示。 ![](https://box.kancloud.cn/2016-08-14_57b00362871a1.jpg) 圖12-3 代理模式的通用類圖 代理模式也叫做委托模式,它是一項基本設計技巧。許多其他的模式,如狀態模式、策略模式、訪問者模式本質上是在更特殊的場合采用了委托模式,而且在日常的應用中,代理模式可以提供非常好的訪問控制。在一些著名開源軟件中也經常見到它的身影,如Struts2的Form元素映射就采用了代理模式(準確地說是動態代理模式)。我們先看一下類圖中的三個角色的定義: ● Subject抽象主題角色 抽象主題類可以是抽象類也可以是接口,是一個最普通的業務類型定義,無特殊要求。 ● RealSubject具體主題角色 也叫做被委托角色、被代理角色。它才是冤大頭,是業務邏輯的具體執行者。 ● Proxy代理主題角色 也叫做委托類、代理類。它負責對真實角色的應用,把所有抽象主題類定義的方法限制委托給真實主題角色實現,并且在真實主題角色處理完畢前后做預處理和善后處理工作。 我們首先來看Subject抽象主題類的通用源碼,如代碼清單12-6所示。 代碼清單12-6 抽象主題類 public?interface?Subject?{ ?????//定義一個方法 ?????public?void?request(); } 在接口中我們定義了一個方法request來作為方法的代表,RealSubject對它進行實現,如代碼清單12-7所示。 代碼清單12-7 真實主題類 public?class?RealSubject?implements?Subject?{ ?????//實現方法 ?????public?void?request()?{ ?????????????//業務邏輯處理 ?????} } RealSubject是一個正常的業務實現類,代理模式的核心就在代理類上,如代碼清單12-8所示。 代碼清單12-8 代理類 public?class?Proxy?implements?Subject?{ ?????//要代理哪個實現類 ?????private?Subject?subject?=?null;???? ?????//默認被代理者 ?????public?Proxy(){ ?????????????this.subject?=?new?Proxy(); ?????} ?????//通過構造函數傳遞代理者 ?????public?Proxy(Object...objects?){ ?????} ?????//實現接口中定義的方法 ?????public?void?request()?{ ?????????????this.before(); ?????????????this.subject.request(); ?????????????this.after(); ?????} ?????//預處理 ?????private?void?before(){ ?????????????//do?something ?????} ?????//善后處理 ?????private?void?after(){ ?????????????//do?something ?????} } 看到這里,大家別驚訝,為什么會出現before和after方法,繼續看下去,這是一個“引子”,能夠引出一個嶄新的編程模式。 一個代理類可以代理多個被委托者或被代理者,因此一個代理類具體代理哪個真實主題角色,是由場景類決定的。當然,最簡單的情況就是一個主題類和一個代理類,這是最簡潔的代理模式。在通常情況下,一個接口只需要一個代理類就可以了,具體代理哪個實現類由高層模塊來決定,也就是在代理類的構造函數中傳遞被代理者,例如我們可以在代理類Proxy中增加如代碼清單12-9所示的構造函數。 代碼清單12-9 代理的構造函數 public?Proxy(Subject?_subject){ ?????this.subject?=?_subject; } 你要代理誰就產生該代理的實例,然后把被代理者傳遞進來,該模式在實際的項目應用中比較廣泛。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看