最近剛剛開始學習程傑老師的大話設計模式,首先是對面向對象基礎知識的補習,例如類、封裝、繼承、多態、接口和事件等概念;其次就開始學習第一個設計模式--簡單工廠模式了。 開始學習,是由小菜面試受挫引出的,基本一整章都是在說代碼的規范化,包括可維護、可復用、可擴展和靈活性等。比較納悶,設計模式怎麼在說這些呢?上網查了資料才得到解釋: 簡單工廠模式不能說是一個設計模式,說它是一種編程習慣可能更恰當些。因為它至少不是Gof23種設計模式之一。但它在實際的編程中經常被用到,而且思想也非常簡單,可以說是工廠方法模式的一個引導吧。 那麼究竟什麼是簡單工廠模式呢? 我的理解是:用一個單獨的工廠類來創建其他類的實例。 簡單工廠模式的主要組成由三種: 1.工廠(Creator)角色(指概念中的工廠類) 簡單工廠模式的核心,它負責實現創建所有實例的內部邏輯。工廠類可以被外界直接調用,創建所需的產品對象。 2.抽象產品(Product)角色(指概念中的其他類) 簡單工廠模式所創建的所有對象的父類,它負責描述所有實例所共有的公共接口。 3.具體產品(Concrete Product)角色(指概念中的實例) 是簡單工廠模式的創建目標,所有創建的對象都是充當這個角色的某個具體類的實例。 示例代碼: [csharp] public class OperationFactory //簡單運算工廠類 { public Operation CreateOperate(string operate) //返回Operation類型的CreateOperate方法語句 { Operation oper = null; switch (operate) { case "+": oper = new OperateAdd(); break ; case "-": oper = new OperateSub(); break; case "*": oper = new OperateMul(); break; case "/": oper = new OperateDiv(); break; } return oper; } 客戶端的代碼是: [csharp] Operation oper; oper = OperationFactory.CreateOperate("+"); oper.NumberA=1; oper.NumberB=2; double result=oper.GetResult(); 至此,代碼結束了。通過以上的代碼,我們可以發現簡單工廠模式其實也是有利也有弊的。 利: 1.通過使用工廠類,外界可以從直接創建具體產品對象的尴尬局面擺脫出來,明確了各自的職責和權利,有利於整個軟件體系結構的優化; 2.由於工廠類集中了所有實例的創建邏輯,違反了高內聚責任分配原則; 3.將全部創建邏輯集中到了一個工廠類中;它所能創建的類只能是事先考慮到的,如果需要添加新的類,則就需要改變工廠類了。 弊: 1.當系統中的具體產品類不斷增多時候,可能會出現要求工廠類根據不同條件創建不同實例的需求.這種對條件的判斷和對具體產品類型的判斷交錯在一起,很難避免模塊功能的蔓延,對系統的維護和擴展非常不利。 建議使用情況: 1.工廠類負責創建的對象比較少; 2.客戶只知道傳入工廠類的參數,對於如何創建對象(邏輯)不關心; 3.由於簡單工廠很容易違反高內聚責任分配原則,因此一般只在很簡單的情況下應用。 簡單工廠模式雖不是23種設計模式中的一種,但是它對於編程人員的代碼規范還是有一定啟迪的。我們不能只滿足於寫完代碼運行結果正確就完事,編程是一門技術,更是一門藝術,寫出可維護、可復用、可擴展和靈活性好的代碼,應是我們不斷地追求。