工廠方法模式是在簡單工廠模式上再加了一層,新增了乙個抽象工廠和具體工廠。即不再使用乙個工廠類來統一負責所有產品的建立,而是把建立具體產品的任務交給了專門的工廠子類去完成。比如說,我要生產矩形、圓形、菱形這三種形狀,就不再使用乙個工廠了,而是讓矩形工廠、圓形工廠、菱形工廠去完成,而這三個工廠又是形狀工廠(抽象工廠)的子工廠。如果我們想要新生產乙個橢圓形,只需要新增乙個橢圓形工廠就行,讓橢圓形工廠去完成生產。這更符合開閉原則。
定義乙個用於建立物件的介面,但是讓子類決定哪乙個類例項化。工廠方法模式讓乙個類的例項化延遲到其子類。
定義產品的介面,所有具體產品的公共父類。
實現了抽象產品介面,由專門的具體工廠建立,具體工廠與具體產品之間一一對應。
宣告了工廠方法,用於返回同乙個產品。抽象工廠是工廠方法模式的核心,所有建立物件的工廠類都必須實現該介面。
抽象工廠的子類,實現了抽象工廠中宣告的工廠方法,可以由客戶端呼叫,返回乙個具體產品的例項。
spring中也用到了工廠方法模式,一般情況下,應用程式有自己的工廠物件來建立bean。如果將應用程式自己的工廠物件交給spring管理,那麼spring管理的就不是普通的bean,而是工廠bean。
/**
* * @classname log
* @description 日誌記錄器介面 - 抽象產品
* @author 柳成蔭
* @date 2023年9月21日
* @version v1.0.0
*/public inte***ce log
/**
* * @classname filelog
* @description 檔案記錄器 - 具體產品
* @author 柳成蔭
* @date 2023年9月21日
* @version v1.0.0
*/public class filelog implements log
}
/**
* * @classname databaselog
* @description 資料庫日誌記錄 - 具體產品
* @author 柳成蔭
* @date 2023年9月21日
* @version v1.0.0
*/public class databaselog implements log
}
/**
* * @classname logfactory
* @description 日誌記錄工廠介面 - 抽象工廠
* @author 柳成蔭
* @date 2023年9月21日
* @version v1.0.0
*/public inte***ce logfactory
/**
* * @classname filelogfactory
* @description 檔案日誌記錄器工廠類 - 具體工廠
* @author 柳成蔭
* @date 2023年9月21日
* @version v1.0.0
*/public class filelogfactory implements logfactory
}
/**
* * @classname databaselogfactory
* @description 資料庫日誌記錄工廠類 - 具體工廠
* @author 柳成蔭
* @date 2023年9月21日
* @version v1.0.0
*/public class databaselogfactory implements logfactory
}
/**
* * @classname client
* @description 客戶端測試類
* @author 柳成蔭
* @date 2023年9月21日
* @version v1.0.0
*/public class client
}
1.使用者只需關心產品對應的工廠,無需關心建立細節,甚至無需知道具體產品類的類名。
2.讓工廠自主確定建立何種產品物件,而如何建立這個物件的細節完全封裝在具體工廠內部。
3.系統中加入新產品時無需修改抽象工廠和抽象產品提供的介面,無需修改客戶端,也無需修改其他的具體工廠和具體產品,只需要新增乙個具體的工廠和具體的產品即可。系統的可擴充套件性非常好,完全符合開閉原則。
1.新增新產品時,需要編寫新的具體產品類和具體的工廠,導致系統中類的個數成對增加。在一定程度上增加了系統的複雜性,有更多的類需要編譯和執行,給系統增加了一些額外的開銷。
2.需要使用抽象層進行定義,增加了系統的抽象性和理解難度。
抽象工廠與工廠方法模式
1.如果乙個後花園只種蔬菜類,那麼就用簡單工廠就可以了.2.如果後花園蔬菜品種繁多.得用工廠方法才可以,把共有的東西抽象出來.3.如果要擴大後花園的規模,比如乙個在北方,乙個在南方,這樣工廠方法就無法實現了,就應當用抽象工廠,把各種各樣的植物,又組成乙個後花園.簡單工廠是乙個工廠只生產一類的產品,面...
工廠方法模式與抽象工廠模式
工廠方法 public inte ce product public inte ce creator public class concreteproduct1 implements product public class concreteproduct2 implements product p...
工廠方法模式與抽象工廠模式
這篇部落格主要記錄一下工廠方法模式和抽象工廠模式。工廠方法模式比較常見,且相對比較容易理解,因此直接介紹一下它的定義及設計結構。工廠方法模式定義了乙個建立物件的介面,但由子類決定例項化的類是哪乙個。工廠方法讓類把例項化推遲到子類。如圖所示,抽象的creator提供了乙個建立物件的介面factorym...