工廠方法-定義與類型
定義:定義一個(gè)創(chuàng)建對(duì)象的接口
但讓視線這個(gè)接口的類來決定實(shí)例化哪個(gè)類
工廠方法讓類的實(shí)例化推遲到子類中進(jìn)行
類型:創(chuàng)建型
創(chuàng)建對(duì)象需要大量重復(fù)的代碼
客戶端(應(yīng)用)不依賴與產(chǎn)品實(shí)例如何被創(chuàng)建幕侠、實(shí)現(xiàn)等細(xì)節(jié)
一個(gè)類通過其子類來指定創(chuàng)建哪個(gè)對(duì)象
優(yōu)點(diǎn): 用戶只需要關(guān)心所需產(chǎn)品對(duì)應(yīng)的工廠樟蠕,無須關(guān)心創(chuàng)建細(xì)節(jié)
? ? ? ? ? 加入新產(chǎn)品符合開閉原則,提高可擴(kuò)展性
缺點(diǎn): 類的個(gè)數(shù)容易過多棵介,增加復(fù)雜度
? ? ? ? ? 增加了系統(tǒng)的抽象性和理解難度
特點(diǎn):同一產(chǎn)品等級(jí)
區(qū)分:? ? 產(chǎn)品等級(jí)與產(chǎn)品族的概念,
? ? ? ? 美的空調(diào)大脉、海爾空調(diào)蕾盯,屬于同一產(chǎn)品等級(jí),都是空調(diào)
? ? ? ? 美的空調(diào)唬党、美的洗衣機(jī),屬于同一產(chǎn)品族鬼佣,都是美的
JDK中的體現(xiàn):
例子一:集合類java.util.Collection中定義的一個(gè)接口Iterator屬于工廠方法可以讓
(Collection屬于抽象工廠)
? ? ? ? Iterator的一個(gè)實(shí)現(xiàn)類,ArrayList的實(shí)現(xiàn):實(shí)現(xiàn)iterator方法返回了一個(gè)內(nèi)部類Itr霜浴,該內(nèi)部類Itr實(shí)現(xiàn)了Iterator接口
例子二:java.net.URLStreamHandlerFactory在JDK里是用來解決URL協(xié)議擴(kuò)展使用的
public interface URLStreamHandlerFactory{
? ? URLStreamHandler createURLStreamHandler(String protocol);
}
例子三:org.slf4j.LoggerFactory