1.複製和復用
已經完成了專案a,還需要完成專案b,並且專案a和專案b所實現的功能有很多想同之處時,如果直接將專案a的**複製到專案b去是非常不妥的行為,隨著工程量的加大,維護時將會成為一場災難。
正確的做法應該是將專案a的功能分離開來,降低專案a的耦合性,然後可以在專案b中使用一部分專案a中的功能,差異的地方再在專案b中自行完成。
2.業務的封裝
在編寫乙個專案時,需要將它的業務邏輯和介面邏輯給分離開。例如,編寫乙個計算器的程式,我們就需要把輸入提示、運算結果顯示等**做為乙個類,再將數**算作為另乙個類,這樣就可以完成兩者的分離,如果之後出現乙個新的專案,讓我們把之前寫的計算器從命令列程式變為windows程式或web版程式等,就可以直接復用之前寫好的運算類。
3.松耦合
專案進行了封裝後有了一定的復用性,但是它還沒有良好的擴充套件性。由於專案的發展,我們需要在原來實現的計算器上新增新的功能,加入平方、根號等。如果在原來專案的基礎上修改的話,就必須修改已經寫好的源**。假如我們原來的**是用switch、case語句來判斷運算子,從而來進行運算,這樣我們就不得不去修改switch、case語句,如果多人開發這個專案就會因為修改他人的**讓工程變得十分的危險。
所以這裡我們就需要用到繼承和多型。我們先寫出乙個operation的基類,給它寫出乙個calculate的虛方法,然後讓加、減、乘、除等分別繼承operation並實現calculate方法,以後還有更多的功能都可以來繼承operation。這樣做的最大好處就是降低了各功能之間的耦合度。
4.簡單工廠模式
有了上面的準備後,**有了一定的可復用性和可擴充套件性,但是這個工程還有乙個問題。這個工程實現了很多功能(加減乘除等),但是缺少了乙個例項化這些功能的類。
我們在使用這些計算類時,我們不可能同時去例項化所有的計算類,所以我們需要乙個計算工廠類operationfactory,它用來根據需求例項化對應的計算功能。在這個類的內部實現所有計算類的例項化,並通過乙個方法來接受使用者給的運算子,根據運算子的型別來例項化對應的運算類,這樣就實現了乙個簡單工廠模式。以後如果我們還需要擴充套件,我們想再加入平方演算法,我們需要去再派生乙個operation基類,用它來實現平方演算法,並修改工廠類實現**的擴充套件了。如果我們希望修改一下加法的演算法,我們就需要去修改加法類相關的**。
5.uml圖
6.總結
簡單工廠模式:乙個工廠方法,依據傳入的引數,生成對應的具體產品物件;
補充:不屬於23種gof設計模式;
工廠方法一般設成靜態方法,返回值一般是抽象類或介面,具體的產品類一般繼承或實現抽象類、介面;
優點:產品使用者不需要關心產品類的建立過程,與具體產品的實現類達到解耦的效果;
缺點:違背"開放--封閉"原則(ocp),因為新增乙個產品類的時候,需要修改原先的工廠方法,並且必須派生乙個新類,工作量較大;
適用場合:當工廠類負責建立的物件比較少的時候;
設計模式學習筆記 1 簡單工廠模式
優點缺點 每次增加乙個產品時,都需要增加乙個具體類和物件實現工廠,使得系統中類的個數成倍增加,在一定程度上增加了系統的複雜度,同時也增加了系統具體類的依賴 使用場景 注意事項 實戰 鏈結 package factorypattern author yangxin ryan create circle...
設計模式 1 簡單工廠模式
簡單工廠模式屬於建立型的設計模式,其特點是使用乙個工廠生產所有的類物件,通過在工廠類中進行判斷,然後建立需要的功能類。優點 不必使用具體的功能類去建立該類的例項。缺點 新增乙個功能類就需要在工廠類中增加乙個判斷。此處利用 這4個operation來生成不同的operation物件來說明簡單工廠模式。...
設計模式 1 簡單工廠模式
總結簡單工廠設計模式就是為了能夠根據不同情況動態獲取到需要的型別 在本次將會演示乙個計算器的功能 我們無法知道使用者在程式中會輸入哪些字元,是 或者其他,但是我們能確定的是使用者需要通過輸入將兩個值進行運算,得到乙個返回結果。那麼在此處我們就可以建立乙個演算法基類,有設定值並計算後返回值的方法,值1...