C#實現簡單工廠模式
(文章地址:http://mp.weixin.qq.com/s/kkilLvrr7h3qgqiwVtzPfw) 末尾有工程檔案
設計模式雖然對效能來說不會有很大的提升,但是許多設計模式在開發的過程中還是非常有用的,運用好設計模式,可以幫助提升開發效率,加快開發速度 。 今天分享的是:簡單工廠模式
軟體開發中策劃一般有這樣一個需求:需要開發一個簡單的計算器,實現加、減、乘、除的數學運算,首先按照我們正常的開發邏輯和快速開發需求來設計,我們會這樣實現:
好了,具體的功能都實現了,策劃的需求也滿足了,但是你以為這樣就結束了嗎?甲方的新需求來了:由於我們業務的原因,我們現在公司做大了,以前用加減乘除就能算完的財務,現在需要用冪次方才能解決了。好吧,emmmm,你可能會想,嗯,這個還不簡單嗎?我直接在Switch語句中在新增一個Case分支,再把對應的運算邏輯也寫進去不就完了?
然後在修改對應的提示部分。對的,這樣的做法沒有錯,實現了具體的功能。但是我們思考一下,如果甲方的業務拓展到了全國,他覺得平方的計算也滿足不了他財務計算的需求了,但是他還需要保留原有一些加減乘除的計算需求,這個時候我們可能會想,那還不簡單嗎,我再加一個case語句,再把 計算過程在case裡實現以下,對應的運算子提示部分也新增以下。嗯,就是這樣。好了,甲方需求又來了,這次他們的業務擴充套件到了全球,需要的計算量不是簡單的加減乘除能夠滿足的了。回過頭看程式,可能會發現,每次甲方該需求,我們都要去Switch語句中新增一個case分支,然後再實現具體的計算過程,再到選擇運算子提示部分更改相應的提示。當甲方的需求越來越多,越來與複雜,會發現,swicth語句變得非常龐大,一個case分支可能就佔據了數十數百行,閱讀起來十分困難,並且,在case分支下侷限非常多,許多功能實現起來非常繁瑣。這個時候,我們就可以考慮使用簡單工廠模式來解決這個問題了。
首先,我們把問題提取出來分析,在這個計算器的實現過程中,我們把功能抽象化,1.需要讀取使用者的輸入 2.對使用者的輸入進行不同的計算 3.輸出計算的結果。就這麼簡單的三個步驟。從上面的程式碼中可以看出,計算的過程有很大的相同處和不同之處,比如:都需要傳入兩個值,都有一個運算子,都需要輸出一個結果。只是選擇的運算子不同,而且加減乘除之間的運算過程相互之間沒有任何的聯絡和影響。我加法負責把兩個數相加,做減法時,我只負責把兩個數相減就可以了,你其它運算子做什麼關我什麼事啊,我為什麼要和你們這些一直增長的傢伙放在一起啊,沒有你們,我一樣也能減的開心,我只需要把我減的結果告訴網管就可以了,下次要做減法的時候,讓網管給我兩個數,我還他一個beautiful。從中可以看出,做運算的時候,只需要有兩個數,返回一個結果就行,你TM管我是加法還是減法。那麼,我們是不是可以把運算過程獨立出來呢?找找看,所有運算過程公有的部分,把公有部分提取出來,做成一個基類:
加法運算:
減法運算:
平方運算:
好了,到這裡具體的運算過程都已經被單獨的提取出來了,下面實現一下這個簡單的工廠類:
最後實現一下呼叫的過程:
這就是簡單工廠的大概實現方式,其實現過程還有許多可以優化的地方,比如,不使用switch語句來判斷傳入的運算髮是什麼,實際開發過程中使用響應式程式設計或者是觸發式程式設計來處理運算子的傳入,總之,具體的問題具體看吧。下次甲方需要加需求,我們只需要新增相對應的計算類就可以了,可以試著把switch語句去除,這樣使得程式更加簡潔。