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

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ### **場景概述** 舉一個店鋪售賣不同品牌手機的例子:店鋪,即客戶端類向手機工廠購進手機售賣。 1. 最開始實例化一個商店,商店打算賣華為手機 2. 商店委托工廠給他制作一臺HWPhone手機,傳入對應的字段tag。 3. 手機生產好以后打包送到商店 4. 商店售賣手機 ### **場景分析** 該場景可以使用簡單工廠的角色來設計: * 抽象產品:Phone,是所有具體產品類的父類,提供一個公共接口packaging表示手機的裝箱并送到店鋪。 * 具體產品:不同品牌的手機,小米手機類(MIPhone),華為手機類(HWPhone)。 * 工廠:PhoneFactory根據不同的參數來創建不同的手機。 * 客戶端類:店鋪類Store負責售賣手機。 ### **代碼實現** 抽象產品類Phone: ~~~ public abstract class AbstractPhone { public abstract void packaging(); } ~~~ 具體產品類 MIPhone: ~~~ public class MIPhone extends AbstractPhone { @Override public void packaging() { System.out.println("小米手機"); } } ~~~ 具體產品類:HWPhone: ~~~ public class HWPhone extends AbstractPhone { @Override public void packaging() { System.out.println("華為手機"); } } ~~~ 以上是抽象產品類以及它的2個子類:小米手機類和華為手機類 下面看一下工廠類 PhoneFactory: ~~~ public class PhoneFactory { public IPhone createPhoneWithTag(String tag) { IPhone phone = null; switch (tag) { case "XM": phone = new MIPhone(); break; case "HW": phone = new HWPhone(); break; default: } return phone; } } ~~~ >工廠類向外部(客戶端)提供了一個創造手機的接口createPhoneWithTag:,根據傳入參數的不同可以返回不同的具體產品類。因此客戶端只需要知道它所需要的產品所對應的參數即可獲得對應的產品了。 在本例中,我們聲明了店鋪類 Store為客戶端類: ~~~ public class Store { public void sellPhone(IPhone phone) { phone.packaging(); } } ~~~ >客戶端類聲明了一個售賣手機的接口sellPhone:。表示它可以售賣作為參數所傳入的手機。 最后我們用代碼模擬一下這個實際場景: ~~~ public static void main(String[] args) { PhoneFactory factory = new PhoneFactory(); IPhone hw = factory.createPhoneWithTag("HW"); Store store = new Store(); store.sellPhone(hw); } ~~~ 在這里我們需要注意的是:商店從工廠拿到手機不需要了解手機制作的過程,只需要知道它要工廠做的是手機(只知道IPhone類即可),和需要給工廠類傳入它所需手機所對應的參數即可(這里HWPhone手機對應的參數就是tag)。 ### **代碼對應的類圖:** ![](https://img.kancloud.cn/df/61/df61e3b798d88b506a4ed8d2b4b761e5_763x432.png) ## **優點** * 客戶端只需要給工廠類傳入一個正確的(約定好的)參數,就可以獲取你所需要的對象,而不需要知道其創建細節,一定程度上減少系統的耦合。 * 客戶端無須知道所創建的具體產品類的類名,只需知道具體產品類所對應的參數即可,減少開發者的記憶成本。 ## **缺點** * 如果業務上添加新產品的話,就需要修改工廠類原有的判斷邏輯,這其實是違背了開閉原則的。 * 在產品類型較多時,有可能造成工廠邏輯過于復雜。所以簡單工廠模式比較適合產品種類比較少而且增多的概率很低的情況。
                  <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>

                              哎呀哎呀视频在线观看