設(shè)計(jì)模式--工廠模式2
介紹
主要解決:主要解決接口選擇的問(wèn)題。
如何解決:讓其子類(lèi)實(shí)現(xiàn)工廠接口,返回的也是一個(gè)抽象的產(chǎn)品。
優(yōu)點(diǎn):?
1、一個(gè)調(diào)用者想創(chuàng)建一個(gè)對(duì)象,只要知道其名稱(chēng)就可以了。
2、擴(kuò)展性高,如果想增加一個(gè)產(chǎn)品,只要擴(kuò)展一個(gè)工廠類(lèi)就可以。
3、屏蔽產(chǎn)品的具體實(shí)現(xiàn),調(diào)用者只關(guān)心產(chǎn)品的接口。
缺點(diǎn):每次增加一個(gè)產(chǎn)品時(shí),都需要增加一個(gè)具體類(lèi)和對(duì)象實(shí)現(xiàn)工廠,使得系統(tǒng)中類(lèi)的個(gè)數(shù)成倍增加,在一定程度上增加了系統(tǒng)的復(fù)雜度,同時(shí)也增加了系統(tǒng)具體類(lèi)的依賴(lài)。這并不是什么好事。
使用場(chǎng)景:?
1、日志記錄器:記錄可能記錄到本地硬盤(pán)、系統(tǒng)事件、遠(yuǎn)程服務(wù)器等,用戶(hù)可以選擇記錄日志到什么地方。
2、數(shù)據(jù)庫(kù)訪問(wèn),當(dāng)用戶(hù)不知道最后系統(tǒng)采用哪一類(lèi)數(shù)據(jù)庫(kù),以及數(shù)據(jù)庫(kù)可能有變化時(shí)。
3、設(shè)計(jì)一個(gè)連接服務(wù)器的框架,需要三個(gè)協(xié)議,"POP3"、"IMAP"、"HTTP",可以把這三個(gè)作為產(chǎn)品類(lèi),共同實(shí)現(xiàn)一個(gè)接口。
實(shí)現(xiàn)
1.簡(jiǎn)單工廠模式
看一個(gè)披薩的項(xiàng)目:要便于披薩種類(lèi)的擴(kuò)展,要便于維護(hù)。
披薩的種類(lèi)很多(比如GreekPizza、CheesePizza等);
披薩的制作有prepare,bake,cut,box;
完成披薩店訂購(gòu)功能。

傳統(tǒng)方式的優(yōu)缺點(diǎn):
優(yōu)點(diǎn)是比較好理解,簡(jiǎn)單易操作;
缺點(diǎn)是違反了設(shè)計(jì)模式的ocp原則,即對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉。即當(dāng)我們給類(lèi)增加新功能的時(shí)候,盡量不修改代碼,或者盡量少修改代碼;
比如這時(shí)我們要新增加一個(gè)Pizza的種類(lèi)(Pepper披薩),我們需要做的修改較大。
改進(jìn)的思路分析:
分析:修改代碼可以接受,但是如果我們?cè)谄渌牡胤揭灿袆?chuàng)建Pizza的代碼,就意味著,也需要修改,而創(chuàng)建Pizza的代碼,往往有多處;
思路:把創(chuàng)建Pizza對(duì)象封裝到一個(gè)類(lèi)中,這樣我們有新的Pizza種類(lèi)時(shí),只需要修改該類(lèi)就可,其它有創(chuàng)建到Pizza對(duì)象的代碼就不需要修改了(使用簡(jiǎn)單工廠模式)。
2.工廠方法模式
