今天來學習乙個使用非常廣泛、也非常有威力的設計模式–工廠模式,主要核心還是在於幫助我們針對抽象程式設計,而不是針對具體類程式設計。
簡單工廠是什麼?是不是乙個設計模式?如果使用?
工廠方法是什麼?抽象了什麼?
抽象工廠是什麼?抽象了什麼?
工廠方法和抽象工廠的區別?
簡單工廠不算是乙個真正的設計模式,而更像是一種我們的程式設計習慣,但是在平時編碼中這不失為乙個簡單的方法,可以將客戶程式從具體類解耦。
工廠類擁有乙個工廠方法(create),接受了乙個引數,通過不同的引數例項化不同的產品類。
很明顯,簡單工廠的特點就是「簡單粗暴」,通過乙個含參的工廠方法,我們可以例項化任何產品類,上至飛機火箭,下至土豆麵條,無所不能。
所以簡單工廠有乙個別名:上帝類。
任何」東西「的子類都可以被生產,負擔太重。當所要生產產品種類非常多時,工廠方法的**量可能會很龐大。
在遵循開閉原則(對拓展開放,對修改關閉)的條件下,簡單工廠對於增加新的產品,無能為力。因為增加新產品只能通過修改工廠方法來實現。
工廠方法正好可以解決簡單工廠的這兩個缺點。接著往下看吧,通過這種層層遞進的學習,你一定會理解的透徹。
public
class
animalfactory
elseif(
"dog"
.equals
(name)
)elseif(
"cow"
.equals
(name)
)else
}}
定義了乙個建立物件的介面,但由子類決定要例項化的類是哪乙個。工廠方法讓類的例項化推遲到子類。工廠方法模式就很好的減輕了工廠類的負擔,把某一類/某一種東西交由乙個工廠生產;(對應簡單工廠的缺點1。
同時增加某一類 」東西「 並不需要修改工廠類,只需要新增生產這類 」東西「 的工廠即可,使得工廠類符合開放-封閉原則。
對於某些可以形成產品族(一組產品)的情況處理比較複雜。
// 抽象出來的動物工廠----它只負責生產一種產品
public
abstract
class
animalfactory
// 具體的工廠實現類
public
class
catfactory
extends
animalfactory
}//具體的工廠實現類
public
class
dogfactory
extends
animalfactory
}
提供乙個介面,用於建立相關或依賴物件的家族,而不需要明確指定具體類。例如,汽車可以分為轎車、suv、mpv等,也分為賓士、寶馬等。我們可以將賓士的所有車看作是乙個產品族,而將寶馬的所有車看作是另乙個產品族。分別對應兩個工廠,乙個是賓士的工廠,另乙個是寶馬的工廠。與工廠方法不同,賓士的工廠不只是生產具體的某乙個產品,而是一族產品(賓士轎車、賓士suv、賓士mpv)。「抽象工廠」的「抽象」指的是就是這個意思。 即相比於工廠方法,抽象工廠定義了一系列的產品,而不是乙個產品。上邊的工廠方法模式是一種極端情況的抽象工廠模式(即只生產一種產品的抽象工廠模式),而抽象工廠模式可以看成是工廠方法模式的一種推廣。
今天新學習到的oo原則:依賴抽象,不要依賴具體類
工廠模式(簡單工廠 工廠方法 抽象工廠)
二 工廠方法 三 抽象工廠 以下內容通過生產小公尺和華為手機 電腦 的例子實現 uml圖 phone介面 abstractproduct public inte ce phone miphone product1 public class miphone implements phone overr...
詳解工廠模式(簡單工廠 工廠方法 抽象工廠)
當你有大量的實現同一介面的類的時候,在合適的時候例項化合適的類,如果把這些 new 分散到專案的各個角落,不僅會使業務邏輯變的混亂並且使得專案難以維護。這時候如果引進工廠模式的概念,就能很好的處理這個問題。我們還可以通過應用程式配置或者提供引數的形式讓工廠類為我們返回合適的的例項。工廠類,它把例項化...
簡單工廠模式 工廠方法模式 抽象工廠模式
簡單工廠模式 簡單工廠模式並不是23種設計模式中的,但是在實際的應用中卻經常使用。uml圖 簡單工廠模式的建立目標,所有建立的物件都是充當這個角色的某個具體類的例項。在這個模式中,工廠類是整個模式的關鍵所在。它包含必要的判斷邏輯,能夠根據外界給定的資訊,決定究竟應該建立哪個具體類的物件。使用者在使用...