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

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                19.2 適配器模式的定義 適配器模式(Adapter Pattern)的定義如下: Convert the interface of a class into another interface clients expect.Adapter lets classes work together that couldn't otherwise because of incompatible interfaces.(將一個類的接口變換成客戶端所期待的另一種接口,從而使原本因接口不匹配而無法在一起工作的兩個類能夠在一起工作。) 適配器模式又叫做變壓器模式,也叫做包裝模式(Wrapper),但是包裝模式可不止一個,還包括了第17章講解的裝飾模式。適配器模式的通用類圖,如圖19-4所示。 ![](https://box.kancloud.cn/2016-08-14_57b0036636c1b.jpg) 圖19-4 適配器模式通用類圖 適配器模式在生活中還是很常見的,比如你筆記本上的電源適配器,可以使用在110~220V之間變化的電源,而筆記本還能正常工作,這也是適配器一個良好模式的體現,簡單地說,適配器模式就是把一個接口或類轉換成其他的接口或類,從另一方面來說,適配器模式也就是一個包裝模式,為什么呢?它把Adaptee包裝成一個Target接口的類,加了一層衣服,包裝成另外一個靚妞了。大家知道,設計模式原是為建筑設計而服務的,軟件設計模式只是借用了人家的原理而已,那我們來看看最原始的適配器是如何設計的,如圖19-5所示。 A、B兩個圖框代表已經塑模成型的物體A和物體B,那現在要求把A和B安裝在一起使用,如何安裝?兩者的接口不一致,是不可能安裝在一起使用的,那怎么辦?引入一個物體C,如圖19-6所示。 ![](https://box.kancloud.cn/2016-08-14_57b003664cda3.jpg) 圖19-5 兩個已經成型的物體                  圖19-6 引入物體C 引入物體C后,C適應了物體A的接口,同時也適應了物體B的接口,然后三者就可以組合成一個完整的物體,如圖19-7所示。   ![](https://box.kancloud.cn/2016-08-14_57b0036660d1c.jpg) 圖19-7 完美組合 其中的物體C就是我們說的適配器,它在中間起到了角色轉換的作用,把原有的長條形接口轉換了三角形接口。在我們軟件業的設計模式中,適配器模式也是相似的功能,那我們先來看看適配器模式的三個角色。 ● Target目標角色 該角色定義把其他類轉換為何種接口,也就是我們的期望接口,例子中的IUserInfo接口就是目標角色。 ● Adaptee源角色 你想把誰轉換成目標角色,這個“誰”就是源角色,它是已經存在的、運行良好的類或對象,經過適配器角色的包裝,它會成為一個嶄新、靚麗的角色。 ● Adapter適配器角色 適配器模式的核心角色,其他兩個角色都是已經存在的角色,而適配器角色是需要新建立的,它的職責非常簡單:把源角色轉換為目標角色,怎么轉換?通過繼承或是類關聯的方式。 各個角色的職責都已經非常清楚,我們再來看看其通用源碼,目標接口如代碼清單19-8所示。 代碼清單19-8 目標角色 public?interface?Target?{ ?????//目標角色有自己的方法 ?????public?void?request(); } 目標角色是一個已經在正式運行的角色,你不可能去修改角色中的方法,你能做的就是如何去實現接口中的方法,而且通常情況下,目標角色是一個接口或者是抽象類,一般不會是實現類。一個正在服役的目標角色,如代碼清單19-9所示。 代碼清單19-9 目標角色的實現類 public?class?ConcreteTarget?implements?Target?{ ?????public?void?request()?{ ?????????????System.out.println("if?you?need?any?help,pls?call?me!");???} } 源角色也是已經在服役狀態(當然,非要新建立一個源角色,然后套用適配器模式,那也沒有任何問題),它是一個正常的類,其源代碼如代碼清單19-10所示。 代碼清單19-10 源角色 public?class?Adaptee?{ ?????//原有的業務邏輯 ?????public?void?doSomething(){ ?????????????System.out.println("I'm?kind?of?busy,leave?me?alone,pls!"); ?????} } 我們的核心角色要出場了,適配器角色如代碼清單19-11所示。 代碼清單19-11 適配器角色 public?class?Adapter?extends?Adaptee?implements?Target?{ ?????public?void?request()?{ ?????????????super.doSomething(); ?????} } 所有的角色都已經在場了,那我們就開始看看這場演出,場景類如代碼清單19-12所示。 代碼清單19-12 場景類 public?class?Client?{ ?????public?static?void?main(String[]?args)?{ ?????????????//原有的業務邏輯 ?????????????Target?target?=?new?ConcreteTarget(); ?????????????target.request(); ?????????????//現在增加了適配器角色后的業務邏輯 ?????????????Target?target2?=?new?Adapter(); ?????????????target2.request(); ?????} } 適配器模式的原理就講這么多吧,但是別得意得太早了,如果你認為適配器模式就這么簡單,那我告訴你,你錯了!復雜的還在后面。
                  <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>

                              哎呀哎呀视频在线观看