<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、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 工廠三兄弟之簡單工廠模式(一) 工廠模式是最常用的一類創建型設計模式,通常我們所說的工廠模式是指工廠方法模式,它也是使用頻率最高的工廠模式。本章將要學習的簡單工廠模式是工廠方法模式的“小弟”,它不屬于GoF 23種設計模式,但在軟件開發中應用也較為頻繁,通常將它作為學習其他工廠模式的入門。此外,工廠方法模式還有一位“大哥”——抽象工廠模式。這三種工廠模式各具特色,難度也逐個加大,在軟件開發中它們都得到了廣泛的應用,成為面向對象軟件中常用的創建對象的工具。 1 圖表庫的設計 Sunny軟件公司欲基于Java語言開發一套圖表庫,該圖表庫可以為應用系統提供各種不同外觀的圖表,例如柱狀圖、餅狀圖、折線圖等。Sunny軟件公司圖表庫設計人員希望為應用系統開發人員提供一套靈活易用的圖表庫,而且可以較為方便地對圖表庫進行擴展,以便能夠在將來增加一些新類型的圖表。 Sunny軟件公司圖表庫設計人員提出了一個初始設計方案,將所有圖表的實現代碼封裝在一個Chart類中,其框架代碼如下所示: ``` class Chart { private String type; //圖表類型 public Chart(Object[][] data, String type) { this.type = type; if (type.equalsIgnoreCase("histogram")) { //初始化柱狀圖 } else if (type.equalsIgnoreCase("pie")) { //初始化餅狀圖 } else if (type.equalsIgnoreCase("line")) { //初始化折線圖 } } public void display() { if (this.type.equalsIgnoreCase("histogram")) { //顯示柱狀圖 } else if (this.type.equalsIgnoreCase("pie")) { //顯示餅狀圖 } else if (this.type.equalsIgnoreCase("line")) { //顯示折線圖 } } } ``` 客戶端代碼通過調用Chart類的構造函數來創建圖表對象,根據參數type的不同可以得到不同類型的圖表,然后再調用display()方法來顯示相應的圖表。 不難看出,Chart類是一個“巨大的”類,在該類的設計中存在如下幾個問題: (1) 在Chart類中包含很多“if…else…”代碼塊,整個類的代碼相當冗長,代碼越長,閱讀難度、維護難度和測試難度也越大;而且大量條件語句的存在還將影響系統的性能,程序在執行過程中需要做大量的條件判斷。 (2) Chart類的職責過重,它負責初始化和顯示所有的圖表對象,將各種圖表對象的初始化代碼和顯示代碼集中在一個類中實現,違反了“單一職責原則”,不利于類的重用和維護;而且將大量的對象初始化代碼都寫在構造函數中將導致構造函數非常龐大,對象在創建時需要進行條件判斷,降低了對象創建的效率。 (3) 當需要增加新類型的圖表時,必須修改Chart類的源代碼,違反了“開閉原則”。 (4) 客戶端只能通過new關鍵字來直接創建Chart對象,Chart類與客戶端類耦合度較高,對象的創建和使用無法分離。 (5) 客戶端在創建Chart對象之前可能還需要進行大量初始化設置,例如設置柱狀圖的顏色、高度等,如果在Chart類的構造函數中沒有提供一個默認設置,那就只能由客戶端來完成初始設置,這些代碼在每次創建Chart對象時都會出現,導致代碼的重復。 面對一個如此巨大、職責如此重,且與客戶端代碼耦合度非常高的類,我們應該怎么辦?本章將要介紹的簡單工廠模式將在一定程度上解決上述問題。 為什么要引入工廠類,大家可參見:[創建對象與使用對象——談談工廠的作用](http://blog.csdn.net/lovelion/article/details/7523392)。
                  <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>

                              哎呀哎呀视频在线观看