設計模式中。計算器的加減乘除或再外加其它的運算時,對其進行例項化,就能夠用到簡單工廠模式。用乙個單獨的類來做這個創造例項的過程,這就是工廠。
從《大化設計模式》中,思維在不斷的碰撞,讓我們在來回想一下計算器的編寫過程中一步步的關鍵變化。
如題「用物件導向語言實現乙個計算器控制台程式,要求輸入兩個數和運算子,得到結果」
變動
長處
不足
備註
面向過程
-------
寫windows
等的計算器
**不能非常好復用
不易維護。不靈活,不易擴充套件。不易復用
讓計算和顯示分開
再寫乙個windows
程式中計算器 也可直接復用運算類
若讓小菜加乙個開跟運算,他可趁機將自己工資部分**改動
由於。全部運算都在一起。改動乙個可能影響還有乙個
計算部分分為運算類和子類
子類繼承父類重寫getresult
()方法,
再改動演算法時。不用提供其他演算法**
計算器不知用哪個演算法
運算類中,有兩個number
屬性,用於計算器的前後數,然後有乙個虛方法
getresult
()。用於得到結果
用乙個單獨的類來做創造例項的過程
僅僅要輸入運算符號,工廠就能例項化出合適的物件也易於以後對演算法的新增改動。
----------------
這就是簡單工廠模式
我們用uml圖來看看它的模式後記:真心認為小菜的覺悟好高-_-|||,只是在他改變的過程中,我們也一次次的體會著程式設計的藝術之美。一切源於生活,學習也是如此啊,回歸生活,就會多乙份韻味。
一切也明朗和easy起來。
心想。假設我有這樣乙個工廠,我會用它來生產什麼呢?情景一:各地空氣質素。關心一下廊坊的質量,再看一看北京的,當然還有老家的空氣質素也要特別關注啦。我用乙個工廠「生產」它們。等哪天我去了海南照樣能夠簡單擴充套件。就拿來用。情景二:11期的在作品展宣傳。也給他們做乙個工廠模式,可能幾天裡,周一周二的沒課的人多,就多安排幾個地去宣傳。週三周四沒課的人少。就少安排幾個地方。
可是他們的流程都一樣的。
先定義乙個父類「流程」。在定義子類中去重寫方法。依據各自的不同地點或方式再去重寫。用乙個工廠去例項化它,這樣。哪一天10期的也參加
宣傳,就能夠再工廠中加入乙個類。
並例項就好了。
情景三:五一出遊。同學們都在準備著到哪去玩呢。我們也來給旅行社做個工廠模式吧。
旅行社有5條路線。北京一日遊。天津一日遊等。介面方面,涉及到遊客姓名 人數 時間等,這樣不管在windows 還是在web 在手機上都能夠復用。業務方面他們都會涉及票價,行程,注意事項,做乙個基類,然後子類中再去重寫方法。用簡單工廠模式去做。假設學生們都反映想去白洋淀,旅行社還能夠再不影響其他類時進行加入。假設最近優惠打折也非常靈活的改動。
須要注意的是,假設再加入別的運算類如冪運算。要先加冪運算的類,然後去更改工廠的方法,其中加『case』語句來推斷。這樣,實際上是對擴充套件開放了。也對改動開放了,也就是違背了「開放-封閉」原則。改正也非常easy,用反射技術來去除switch或if。解除分支推斷帶來的耦合。 歡迎關注我的設計模式系列部落格~
附:下面是終於計算器的藝術化身。讓我們一起來體會自始至終它的變化和動態之美。
using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.threading.tasks;
//用乙個單獨的類來做這個創造例項的過程
public class operation
set} public double numberb
set} public virtual double getresult()
/// /// 繼承後重寫result
///
class operationadd:operation
}class operationsub :operation
}class operationmul:operation
}class operationdiv:operation
/// /// 簡單工廠模式
///
public class operationfactory
return oper;}}
/// /// 介面的實現
///
operation oper;
oper =operationfactory.createoperate("+");
oper.numbera = 1;
oper.numberb = 2;
double result=oper.getresult();
}
設計模式 工廠模式(簡單工廠)
一 簡單工廠 定義 簡單工廠模式 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...