相信很多人都聽過設計模式吧,但是也只是侷限於聽說。很多人認為設計模式並沒啥用啊(當然也包括我),我自己寫的**也可以完成需求,為啥還要設計模式呢?
在你學習之後會感嘆**還可以這麼寫,同時也能夠更加熟練的運用物件導向的思想。本系列的文章**於《大話設計模式》,感興趣的朋友們可以找來閱讀一番,很不錯的一本書。
直接開始正文吧,我們要實現兩個數的運算,使用者輸入兩個數字和乙個操作符後,返回運算結果。
相信各位能夠很容易實現該**如下:
public class program
if("-".equals(stroper))
if("*".equals(stroper))
if("/".equals(stroper))
}}
但是我們可以發現,該段**依然有很多問題,如:使用者輸入非法值時,我們沒有進行異常處理;其次,當進行除法運算時,除數為0的話,我們也並沒有進行判斷;接著不斷我輸入哪個運算子,四個if語句都執行了,雖然說計算機運算速度,但是我們寫出精煉的**,能夠讓別人感覺到你的**水平較高。
改進後的**如下:
public class program
else if ("-".equals(stroper))
else if ("*".equals(stroper))
else if ("/".equals(stroper)) else
system.out.println("運算結果:"+result);
}catch (numberformatexception e)
}}
觀察上面的**後,是不是覺得你寫的**已經很完善了,但是這是乙個完全面向過程的程式吧。物件導向的三大特徵封裝、繼承、多型好像並沒有使用吧。該段程式的耦合度很高,高質量的程式應該是耦合度很低的,所以我們應該將業務邏輯與業務邏輯無關的分離,降低彼此之間的耦合度。
實現**如下:
public class operation else
break;
default:
throw new exception("請輸入指定運算子!");
}return result;
}}public class program catch (numberformatexception e)
catch (exception e)
}}
如此一來,我們便將呼叫者與業務邏輯之間進行了解耦和。
但是,如果我們要增加其他運算呢?如求平方根,求次方的話會怎麼做?相信大家的想法是在operation類中增加case語句不就好了嗎?但是這樣做的話,我們得更改原程式的**。通常來說,是很忌諱直接去修改原程式的**。這時,我們就可以運用物件導向的其他特徵了。
public abstract class operation
class operadd extends operation
}class opersub extends operation
}class opermul extends operation
}class operdiv extends operation
}
我們通過判斷運算子的型別,繼承父類生成合適的子類物件,利用多型即可。這樣的話,當需要其他功能時,我們只需要繼續去繼承父類即可。而我們生成合適子類的過程中便用到了簡單工廠模式。
簡單工廠模式示例**如下:
public class ope***ctory
return operation;
}}
當我們進行運算時,讓工廠產生合適的子類物件,這樣我們就可以進行運算了。
public class program catch (numberformatexception e)
catch (exception e)
}}
這個ope***ctory像不像乙個工廠呢?如飲料廠生產飲料,根據使用者的需求去生產合適的飲料。
你可能還挺過靜態工廠模式,那麼什麼時靜態工廠呢?很簡單,不過是將生產子類的方法由物件方法提公升至類方法,這樣我們就可以不用生成工廠物件,直接通過類去呼叫該方法即可。
學習了簡單工廠模式後,我們總結一下什麼時候時候該設計模式,首先對需求進行分習,如上可以分離出乙個抽象類:運算類。然後該類的方法在不同的條件下有不同的執行過程。那麼,此時我們便可以使用簡單工廠模式。
個人部落格:
設計模式 工廠模式(簡單工廠)
一 簡單工廠 定義 簡單工廠模式 factory pattern 屬於類的創新型模式,又叫靜態工廠方法模式 static factorymethod pattern 是通過專門定義乙個類來負責建立其他類的例項,被建立的例項通常都具有共同的父類。特點 工廠類直接實現,乙個產品介面,乙個工廠類可以產生多...
設計模式(簡單工廠模式 工廠模式 抽象工廠模式)
當邏輯較為簡單時,可以直接建立對應的類。如下 include using namespace std class class banana class pear intmain 通過此 可以發現,使用者直接與客戶接觸,違背了dip 依賴倒轉 原則,過於麻煩,所以引出簡單工廠模式。include us...
設計模式 簡單工廠設計模式
請用任意一種物件導向語言實現計算器控制台程式,要求輸入兩個數和運算符號,得到結果。operation運算類 public class operation set public double numberb set public virtual double getresult 加減乘除類 using...