大話設(shè)計(jì)模式筆記 - 簡單工廠模式
總的來說,簡單工廠模式就是對(duì)封裝浅悉,繼承,多態(tài)的基本實(shí)現(xiàn)券犁。是面向?qū)ο蟮幕舅悸贰?/p>
我在最開始寫程序的時(shí)候术健,業(yè)務(wù)邏輯和界面一股腦的堆在一起。根本沒有任何設(shè)計(jì)模式粘衬。
每次業(yè)務(wù)修改的時(shí)候荞估,不是改出新的bug,就是對(duì)已有程序做大手術(shù)稚新。加了很多班勘伺,走了很多彎路。
這個(gè)章節(jié)就分析了為什么會(huì)造成這種情況的原因褂删。
1. 面向?qū)ο缶幊?/h3>
我們?cè)谟龅絾栴}的時(shí)候飞醉,直覺地會(huì)用計(jì)算機(jī)能夠理解的邏輯來表述我們的求解過程。
比如說屯阀,我要處理一個(gè)加減法缅帘,一共要分幾步轴术?
1.輸入第一個(gè)數(shù)
2.輸入運(yùn)算邏輯
3.輸入第二個(gè)數(shù)
4.等待輸出結(jié)果
這么做并沒有錯(cuò),但這樣卻只能滿足當(dāng)下的需求钦无,程序不易維護(hù)逗栽、擴(kuò)展和復(fù)用。
如果有新的運(yùn)算邏輯加入铃诬?我們要怎么修改程序祭陷?
原來所有的算法邏輯都在一個(gè)方法中,我們是再加一個(gè)在其中嗎趣席?
這么寫的話很容易就會(huì)造成bug和動(dòng)大手術(shù)兵志,這就是上面總加班的主要原因。
我們應(yīng)該使用面向?qū)ο蟮乃季S來分析和設(shè)計(jì)軟件宣肚。通過封裝想罕,繼承,多態(tài)霉涨。使業(yè)務(wù)邏輯和產(chǎn)品邏輯解耦按价。
1.1 封裝
首先我們對(duì)業(yè)務(wù)邏輯和界面邏輯封裝。這樣笙瑟,如果我們的程序需要移植到其他平臺(tái)上去的話楼镐,業(yè)務(wù)邏輯可以不用動(dòng)。我們需要重新編寫的只是頁面邏輯往枷。(若二者語言是相同的話)
1.2 松耦合和緊耦合
如果我們所有的算法都在一個(gè)方法當(dāng)中框产,我們修改或者添加一個(gè)算法,那么其他的算法很可能在我們不知情的情況下發(fā)生了變動(dòng)错洁。(這就看自測(cè)和測(cè)試人員能否發(fā)現(xiàn)了)若發(fā)現(xiàn)不了秉宿,很可能產(chǎn)生嚴(yán)重的bug。
所以屯碴,我們需要將所有的算法進(jìn)行松耦合描睦。將他們分別定義。
但是如果我們將他們分別提出一個(gè)單獨(dú)的方法导而,這樣只是在一定程度上解耦了忱叭,我們還可以更進(jìn)一步。
1.3 繼承
定義一個(gè)基類Operation今艺,讓所有的算法都繼承這個(gè)類窑多。
這樣,所有算法的具體實(shí)現(xiàn)都在自己的類當(dāng)中洼滚,根本不會(huì)相互影響埂息。
若我們重新定義一個(gè)新的算法,我們可以讓該算法繼承Operation類,之后把判斷邏輯添加到工廠當(dāng)中千康。
那我們?cè)趺窗讯x好的這些算法類聯(lián)系到我們的邏輯當(dāng)中呢享幽?這就用到了多態(tài)。
1.4 多態(tài)
我們新建一個(gè)工廠類拾弃,在該類當(dāng)中對(duì)用戶的操作進(jìn)行判斷值桩,eg:使用switch 來判斷用戶具體的操作,根據(jù)這個(gè)操作豪椿,給出對(duì)應(yīng)的Operation 實(shí)現(xiàn)類奔坟。返回該類給我們的業(yè)務(wù)邏輯當(dāng)中就可以了。
這就是簡單工廠模式的實(shí)現(xiàn)思路搭盾,一個(gè)從封裝咳秉,到繼承,再到多態(tài)循序漸進(jìn)的過程鸯隅。
2 UML圖
大家都見過UML圖澜建,基礎(chǔ)的我就不說了,這里記錄類與類蝌以,類與接口之間的關(guān)系以及一些思考炕舵。
1. 類與類之間的關(guān)系使用實(shí)線和空心三角表示,表示*繼承*跟畅。
2. 類與接口之間是通過虛線和空心三角表示咽筋。表示*實(shí)現(xiàn)* 他和第一條的區(qū)別就是實(shí)線和虛線的區(qū)別
3. 當(dāng)一個(gè)類需要知道另一個(gè)類時(shí),表示 *關(guān)聯(lián)關(guān)系* 徊件。使用實(shí)線箭頭表示奸攻。
4. A對(duì)象包含B,但B并不是A的一部分庇忌。這表示 *弱擁有* 。用空心棱形和箭頭表示 eg: 雁群 與 大雁之間的關(guān)系
5. 和4相反舰褪,A對(duì)象包含B皆疹,且B是A的一部分,表示 *擁有*占拍。 用實(shí)心棱形和箭頭表示略就。 eg: 翅膀和鳥
6. *依賴關(guān)系*,使用虛線箭頭晃酒。 eg: 鳥 和空氣表牢、水 之間的關(guān)系
我們?cè)跇?gòu)建一個(gè)類的時(shí)候,要思考這個(gè)類和其他類之間的關(guān)系贝次,
只有這樣才能構(gòu)建出更好更穩(wěn)定的系統(tǒng)崔兴。
SUM
編程時(shí)一門技術(shù),更加是一門藝術(shù)。
編程也不是一蹴而就的敲茄,需要反復(fù)思考和琢磨位谋。
共勉。