<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                [TOC] 結構型模式(Structural Pattern)描述如何將類或者對象結合在一起形成更大的結構,就像搭積木,可以通過簡單積木的組合形成復雜的、功能更為強大的結構。 結構型模式可以分為類結構型模式和對象結構型模式。 參考文檔: [代理模式及Java實現動態代理](http://www.jianshu.com/p/6f6bb2f0ece9) # 1 適配器模式 ## 1.1 模式定義 適配器模式(Adapter Pattern):將一個接口轉換成客戶希望的另一個接口,適配器模式使接口不兼容的那些類可以一起工作,其別名為包裝器(Wrapper)。適配器模式既可以作為類結構型模式,也可以作為對象結構型模式。 ## 1.2 模式結構 * Target:目標抽象類 定義客戶要用的特定領域的接口 * Adaptee:適配者類 是被適配的角色,它定義了一個已經存在的接口,這個接口需要適配 * Adapter:適配器類 可以調用另一個接口,作為一個轉換器,對適配者和抽象目標類進行適配,它是適配器模式的核心 * Client:客戶類 針對目標抽象類進行編程,調用在目標抽象類中定義的業務方法 ## 1.3 代碼示例 ```java // 目標類 public interface LightningCharger { void chargeWithLightning(); } // 適配者類 public class MicroUSBCharger { public void chargeWithMicroUSB() { } } // 適配器類 public class ChargerAdapter implements LightningCharger { private MicroUSBCharger mMicroUSBCharger; public ChargerAdapter(MicroUSBCharger microUSBCharger) { mMicroUSBCharger = microUSBCharger; } @Override public void chargeWithLightning() { mMicroUSBCharger.chargeWithMicroUSB(); } } // 客戶類 MicroUSBCharger microUSBCharger = new MicroUSBCharger(); LightningCharger lightningCharger = new ChargerAdapter(microUSBCharger); lightningCharger.chargeWithLightning(); ``` ## 1.4 總結 * 在類適配器模式中,適配器類實現了目標抽象類接口并繼承了適配者類,并在目標抽象類的實現方法中調用所繼承的適配者類的方法; * 在對象適配器模式中,適配器類繼承了目標抽象類并定義了一個適配者類的對象實例,在所繼承的目標抽象類方法中調用適配者類的相應業務方法。 * 適配器模式的主要優點是將目標類和適配者類解耦,增加了類的透明性和復用性,同時系統的靈活性和擴展性都非常好,更換適配器或者增加新的適配器都非常方便,符合“開閉原則”; * 類適配器模式的缺點是適配器類在很多編程語言中不能同時適配多個適配者類,對象適配器模式的缺點是很難置換適配者類的方法。 * 適配器模式適用情況包括:系統需要使用現有的類,而這些類的接口不符合系統的需要;想要建立一個可以重復使用的類,用于與一些彼此之間沒有太大關聯的一些類一起工作。 # 2 代理模式 ## 2.1 模式定義 給某個對象提供一個代理對象,并由代理對象控制對于原對象的訪問,即客戶不直接操控原對象,而是通過代理對象間接地操控原對象。 ## 2.2 模式結構 * Subject:抽象主題角色 聲明了真實主題和代理主題的共同接口 * Proxy:代理主題角色 內部包含對真實主題的引用,從而可以在任何時候操作真實主題對象 * RealSubject:真實主題角色 定義了代理角色所代表的真實對象,在真實主題角色中實現了真實的業務操作,客戶端可以通過代理主題角色間接調用真實主題角色中定義的方法 ## 2.3 代碼示例 抽象主題角色: ```java public interface Subject { void request(); } ``` 真實主題角色: ```java public class RealSubject implements Subject { private static final String TAG = "RealSubject"; @Override public void request() { Log.e(TAG, "request: "); } } ``` 代理主題角色: ```java public class Proxy implements Subject { private static final String TAG = "Proxy"; private Subject mRealSubject; @Override public void request() { Log.e(TAG, "request: preRequest"); if (mRealSubject == null) { mRealSubject = new RealSubject(); } mRealSubject.request(); Log.e(TAG, "request: postRequest"); } } ``` 客戶端類: ```java public class Client { public static void main(String[] args) { Subject subject = new Proxy(); subject.request(); } } ``` 代理模式又分為: * 靜態代理:代理類在編譯時就是實現好的 * 動態代理:代理類是在運行時生成的,也就是 Java 編譯完成后并沒有代理類的 class 文件,而是在運行時動態生成的類字節碼 下面看看 Java 實現動態代理: 動態代理的結構除了上面的抽象主題、代理主題、真實主題外,還增加了一個: 調用處理器: 需要實現 InvocationHandler 接口,用來指定運行時將生成的代理類需要完成的任務。 同時,代理類 Proxy 需要繼承 java.lang.reflect.Proxy。 抽象主題: ```java public interface Subject { void request(); } ``` 真實主題: ```java public class RealSubject implements Subject { private static final String TAG = "RealSubject"; @Override public void request() { Log.e(TAG, "request: "); } } ``` 調用處理器: ```java public class ProxyHandler implements InvocationHandler { private static final String TAG = "ProxyHandler"; private Subject mSubject; public ProxyHandler(Subject subject) { mSubject = subject; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Log.e(TAG, "invoke: before"); Object result = method.invoke(mSubject, args); Log.e(TAG, "invoke: after"); return result; } } ``` 客戶端: ```java public class Client { public static void main(String[] args) { RealSubject realSubject = new RealSubject(); ProxyHandler handler = new ProxyHandler(realSubject); Subject proxySubject = (Subject) Proxy.newProxyInstance(RealSubject.class.getClassLoader(), RealSubject.class.getInterfaces(), handler); proxySubject.request(); } } ``` ## 2.4 總結 * 優點在于能夠協調調用者和被調用者,在一定程度上降低了系統的耦合度 * 缺點在于由于在客戶端和真實主題之間增加了代理對象,因此有些類型的代理模式可能會造成請求的處理速度變慢,并且實現代理模式需要額外的工作,有些代理模式的實現非常復雜 本段參考文檔: [代理模式及Java實現動態代理](http://www.jianshu.com/p/6f6bb2f0ece9) [公共技術點之 Java 動態代理]([https://a.codekk.com/detail/Android/Caij/公共技術點之%20Java%20動態代理](https://a.codekk.com/detail/Android/Caij/%E5%85%AC%E5%85%B1%E6%8A%80%E6%9C%AF%E7%82%B9%E4%B9%8B%20Java%20%E5%8A%A8%E6%80%81%E4%BB%A3%E7%90%86)) # 3 門面模式 又稱外觀模式。 ## 3.1 模式定義 門面模式是對象的結構模式,外部與一個子系統的通信必須通過一個統一的門面對象進行。門面模式提供一個高層次的接口,使得子系統更易于使用。 ## 3.2 模式結構 * 門面角色(Facade): 門面角色為子系統中的一組接口提供一個一致的界面,客戶端可以調用這個角色的方法。此角色知曉相關的(一個或者多個)子系統的功能和責任。在正常情況下,本角色會將所有從客戶端發來的請求委派到相應的子系統去 * 子系統角色(SubSystem): 可以同時有一個或者多個子系統。每個子系統都不是一個單獨的類,而是一個類的集合。每個子系統都可以被客戶端直接調用,或者被門面角色調用。子系統并不知道門面的存在,對于子系統而言,門面僅僅是另外一個客戶端而已。 ## 3.3 代碼示例 ## 3.4 總結
                  <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>

                              哎呀哎呀视频在线观看