想寫這文章是爲我複習和加深自己對閱讀《大話設計模式》的理解。設計模式很多種,用法也各式各樣,但是總結起來無非就是通過這些模式讓你找到"封裝變化"、“對象間的鬆散耦合、”針對接口編程“的感覺,從而設計出易維護、易擴展、易複用、靈活性好的程序。---設計模式就是面向對象編程思維的體操。
簡單工廠模式
《大話設計模式》這本書中列舉了一個非常好的例子,就是以菜鳥的面試經歷引出代碼規範、面向對象編程、複用、封裝以及緊耦合和松耦合的概念。這個例子我覺得堪稱經典。一個簡單的計算器實現:
在main方法中通過if判斷實現”+“、”-“、”*“、”/“的運算。最後在控制檯輸出結構。這麼能不能實現功能呢,那肯定的是能!因爲結果的正確的。可是大家都是java是面向對象的編程語言,我們爲什麼不加以利用呢。
編寫程序的時候我們要考慮如下幾點:
第一點:程序的可維護性
第二點:代碼的可複用性
第三點:程序的可擴展性
第四點:代碼的靈活性好。
在實際應用過程中通過封裝、繼承、多態把程序的耦合度降低通過設計模式是程序變得更加靈活、容易修改並且易於複用。
通過上述內容書中的菜鳥就封裝了一個算法類(Operation)。裏面的寫法就是通過getResult的switch語句選擇性的執行各種算髮,然後返回結果。這種實現方式就是實現了業務和界面的分離。可是這種寫法業務之間結合的太緊密,說句難聽的就是你是公司新入職的同事,公司還沒對你有絕對的信任,但是公司還不得不把這所有的算法交給你來維護,這樣如果有壞心思的人也就可以對其他的業務算法做破壞,這是公司不願意看到的。所以我們爲了漲薪爲了升職也不得不從了公司。要把業務重新封裝,然後再把"+,"-,"*,"/".這個四個業務也進行封裝,然後繼承算法類(Operation)。上述的四個業務實現業務類(operation)的getResult方法。
業務類(Operation),裏面有NumberA和NumberB兩個屬性一個抽象方法getResult()方法;
業務子類:
OperationAdd
OperationSub
OperationMul
OperationDiv
分別實現父類getResult()方法
上面所述的已經算是實現了業務與界面的分離、業務與業務之間分離,這個時候我們工廠也要建立起來了(實現工廠模式):
public class OperationFactory{
public static Operation createOperation(String opera){
Operation opera=null;
switch(opera){
case:"+"
opera=new OperationAdd();
break;
case:"-"
opera=new OperationSub()
break;
case:"*"
opera=new OperationMul();
break;
case:"/"
opera=new OperationDiv();
break;
}
return opera;
}
}
這個工廠代碼完成之後我們只需要輸入符號,工廠就會自動幫我們實例化對應的對象,然後通過對臺返回父類的方式實現了計算器的結果;
剩下的代碼就簡單了
Operation oper=Operation.createtiongFactory.createOperate("+");
oper.NumberA=1;
oper.NumberB=2;
double result=oper.getResult();
這樣業務修改就非常簡單了,如果想讓同事修改加法邏輯,只要給他加法類就好了!
這樣一個簡單的工程模式就實現了!也是我看書的後的總結,大部分也是書裏的內容,希望可以對不理解的朋友有些幫助,我也加深下自己的印象。也希望通過這樣的方式使自己的能力有所提升!