3分鐘重溫抽象工廠模式(電商高頻使用)
來源:mikechen的網際網路架構
抽象工廠模式(Abstract Factory)是一個比較複雜的建立型模式。
抽象工廠模式的工廠是抽象的,產品是抽象的,而且有多個產品需要建立。
這個抽象工廠會對應到多個實際工廠,每個實際工廠負責建立多個實際產品。
上一期,我們介紹了簡單工廠模式和工廠方法模式,還沒看過的小夥伴,可以點選下面連結檢視:
1. 簡單工廠模式
2. 工廠方法模式
這一期,我們來介紹抽象工廠模式。
大家好,我是mikechen,本文是《深入淺出設計模式》的第 10 篇。剛結束的設計模式系列篇:七大設計原則(2萬+字、40多張圖解),大家反響還不錯。
為方便學習,我已將全部內容更新到《深入淺出設計模式》PDF 了,該 PDF 目前有 2+萬字,50+張圖解,80多頁,內容涵蓋設計模式的 7 大原則、23 種設計模式。圖文並茂非常詳細,夯實基礎、復習備面都用得上,需要的同學文末自取。
抽象工廠模式(AbstractFactory)是提供一個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。
抽象工廠模式由抽象工廠、具體工廠、抽象產品、具體產品構成。
抽象工廠(AbstractFactory):宣告瞭用來建立不同產品的方法。
具體工廠(ConcreteFactory):主要是實現抽象工廠中的多個抽象方法,完成具體產品的建立。
抽象產品(AbstractProduct):為每種產品宣告業務方法。
具體產品(Product):定義具體工廠生產的具體產品,並實現抽象產品中定義的業務方法。它同具體工廠之間是多對一的關係。
假設:
華為和小米生產的手機,分為兩條產品線,一個是老人手機,一個是學生手機。
為瞭解決增加產品線的問題,我們用抽象工廠模式來實現。
首先,定義抽象產品類:
public abstract class Dumbphone { public abstract void start();}public abstract class Studentphone { public abstract void start();}
兩個抽象產品類 Dumbphone 、 Studentphone ,分別用來定義兩個產品線老人手機、學生手機,它們都定義了 start 方法,用來啟動手機。
具體產品是華為、小米的老人手機和學生手機:
public class HuaWeiDumbphone extends Dumbphone {
public void start() {
System.out.println("華為老人手機啟動");
}
}
public class XiaoMiDumbphone extends Dumbphone {
public void start() {
System.out.println("小米老人手機啟動");
}
}
public class HuaWeiStudentphone extends Studentphone{
public void start() {
System.out.println("華為學生手機啟動");
}
}
public class XiaoMiStudentphone extends Studentphone{
public void start() {
System.out.println("小米學生手機啟動");
}
}
接著建立生產電腦的抽象工廠:
public abstract class PhoneFactory { public abstract Dumbphone createDumbphone(); public abstract Studentphone createStudentphone();}
上面定義了兩個方法,分別用來生產老人手機和學生手機。
定義華為和小米工廠(具體工廠):
public class HuaWeiFactory extends PhoneFactory {
@Override
public Dumbphone createDumbphone() {
return new HuaWeiDumbphone();
}
@Override
public Studentphone createStudentphone() {
return new HuaWeiStudentphone();
}
}
public class XiaoMiFactory extends PhoneFactory {
@Override
public Dumbphone createDumbphone() {
return new XiaoMiDumbphone();
}
@Override
public Studentphone createStudentphone() {
return new XiaoMiStudentphone();
}
}
華為工廠和小米工廠用來生產老人手機和學生手機這兩個不同產品線的手機。
最後編寫客戶端(客戶端呼叫):
public class Client { public static void main(String[]args) { PhoneFactory HuaWeiFactory=new HuaWeiFactory(); HuaWeiFactory.createDumbphone().start(); HuaWeiFactory.createStudentphone().start(); PhoneFactory XiaoMiFactory=new XiaoMiFactory(); XiaoMiFactory.createDumbphone().start(); XiaoMiFactory.createStudentphone().start(); }}
分別用 HuaWeiFactory 和 XiaoMiFactory 來生產老人手機、學生手機,調用 start 方法啟動它們。
執行結果:
華為老人手機啟動華為學生手機啟動小米老人手機啟動小米學生手機啟動
為了便於理解,我畫了一張這個例子的 UML 類圖。
優點:
抽象工廠模式具有工廠方法模式的優點,並且還可以在類的內部對產品族進行約束;
增加新的產品族時,不需要修改原有系統,非常方便,符合開閉原則;
具體類的建立例項過程與客戶端分離,客戶端透過工廠的抽象介面操縱例項,客戶端並不知道具體的實現是誰。
缺點:
增加新的產品族時,需要修改抽象工廠和所有的具體工廠。
以下場景中,可以考慮使用抽象工廠模式:
一個系統不依賴於產品線例項如何被建立、組合和表達的細節;
系統中有多於一個的產品線,而每次只使用其中某一產品線;
一個產品線(或是一組沒有任何關係的物件)擁有相同的約束。
需要注意的是,使用抽象工廠模式,一般要滿足以下條件:
系統中有多個產品族,每個具體工廠建立同一族但屬於不同等級結構的產品;
系統一次只可能消費其中某一族產品,即同族的產品一起使用。
透過本文,我們瞭解並掌握了抽象工廠模式的概念、結構、原理、使用、優缺點等。
抽象工廠模式是工廠方法模式的升級版本,抽象工廠模式和工廠方法模式的構成一樣,,但它的方法個數、抽象產品的個數不同。
相較工廠方法模式,抽象工廠模式要解決的問題更為複雜。工廠方法模式只生產一個等級的產品,而抽象工廠模式可生產多個等級的產品。
以上,就是關於抽象工廠模式的全部介紹。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024924/viewspace-2996089/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 工廠模式 抽象模式模式抽象
- 抽象工廠模式抽象模式
- 【重溫設計模式】之003工廠方法模式設計模式
- 簡單工廠模式、工廠模式、抽象工廠模式比較模式抽象
- 簡單工廠模式和抽象工廠模式模式抽象
- 建立型:工廠模式-工廠方法、抽象工廠模式抽象
- java 抽象工廠模式Java抽象模式
- 06: 抽象工廠模式抽象模式
- 【重溫23種設計模式】之工廠方法模式設計模式
- 重學 Java 設計模式:實戰抽象工廠模式Java設計模式抽象
- 設計模式-簡單工廠、工廠方法模式、抽象工廠模式設計模式抽象
- 設計模式之工廠方法模式|抽象工廠模式設計模式抽象
- 抽象工廠模式-與-工廠方法模式區別抽象模式
- 一篇搞定工廠模式【簡單工廠、工廠方法模式、抽象工廠模式】模式抽象
- 簡單工廠、工廠方法和抽象工廠模式抽象模式
- 設計模式——抽象工廠模式設計模式抽象
- 設計模式 —— 抽象工廠模式設計模式抽象
- 設計模式-抽象工廠模式設計模式抽象
- 建立型模式——抽象工廠模式模式抽象
- 設計模式學習(二)工廠模式——抽象工廠模式設計模式抽象
- C# 設計模式(1)——簡單工廠模式、工廠模式、抽象工廠模式C#設計模式抽象
- 請教banq 抽象工廠模式怎樣和工廠方法模式配合使用抽象模式
- 工廠方法模式與抽象工廠模式的區別模式抽象
- 【Python】抽象工廠模式Python抽象模式
- 設計模式----抽象工廠設計模式抽象
- 設計模式 – 抽象工廠設計模式抽象
- 建立型模式:抽象工廠模式抽象
- 設計模式 - 抽象工廠設計模式抽象
- 抽象工廠模式(C#)抽象模式C#
- 04_抽象工廠模式抽象模式
- Java抽象工廠模式案例Java抽象模式
- 工廠三兄弟之抽象工廠模式(二)抽象模式
- 工廠三兄弟之抽象工廠模式(一)抽象模式
- 設計模式之工廠模式!深入解析簡單工廠模式,工廠方法模式和抽象工廠模式設計模式抽象
- Java 設計模式之工廠方法模式與抽象工廠模式Java設計模式抽象
- 簡單工廠模式、工廠方法模式和抽象工廠模式有何區別?模式抽象
- java設計模式–抽象工廠模式Java設計模式抽象
- Java設計模式-抽象工廠模式Java設計模式抽象