3分鐘重溫抽象工廠模式(電商高頻使用)

碼農談IT發表於2023-11-20

來源:mikechen的網際網路架構

抽象工廠模式(Abstract Factory)是一個比較複雜的建立型模式。

抽象工廠模式的工廠是抽象的,產品是抽象的,而且有多個產品需要建立。

這個抽象工廠會對應到多個實際工廠,每個實際工廠負責建立多個實際產品。

3分鐘重溫抽象工廠模式(電商高頻使用)

上一期,我們介紹了簡單工廠模式和工廠方法模式,還沒看過的小夥伴,可以點選下面連結檢視:

1. 簡單工廠模式

2. 工廠方法模式

這一期,我們來介紹抽象工廠模式。

mikechen, 10 2+40

便PDF 該 PD 2+50+80 7 23 

3分鐘重溫抽象工廠模式(電商高頻使用)


01
  抽象工廠




抽象工廠模式(AbstractFactory)是提供一個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。


02
  抽象工廠的結構


抽象工廠模式由抽象工廠、具體工廠、抽象產品、具體產品構成。

3分鐘重溫抽象工廠模式(電商高頻使用)

  • 抽象工廠(AbstractFactory:宣告瞭用來建立不同產品的方法。

  • 具體工廠(ConcreteFactory):主要是實現抽象工廠中的多個抽象方法,完成具體產品的建立。

  • 抽象產品(AbstractProduct):為每種產品宣告業務方法。

  • 具體產品(Product):定義具體工廠生產的具體產品,並實現抽象產品中定義的業務方法。它同具體工廠之間是多對一的關係。



03
  抽象工廠的實現


假設:

華為和小米生產的手機,分為兩條產品線,一個是老人手機,一個是學生手機。

瞭解決增加產品線的問題,我們用抽象工廠模式來實現。

首先,定義抽象產品類:








public abstract class Dumbphone {  public abstract void start();}public abstract class Studentphone {   public abstract void start();}



兩個抽象產品類 Dumbphone 、 Studentphone ,分別用來定義兩個產品線老人手機、學生手機,它們都定義了 start 方法,用來啟動手機。

具體產品是華為、小米的老人手機和學生手機:




























public class HuaWeiDumbphone extends Dumbphone {    @Override    public void start() {        System.out.println("華為老人手機啟動");    }}
public class XiaoMiDumbphone extends Dumbphone {    @Override    public void start() {        System.out.println("小米老人手機啟動");    }}
public class HuaWeiStudentphone extends Studentphone{    @Override    public void start() {        System.out.println("華為學生手機啟動");    }}public class  XiaoMiStudentphone extends Studentphone{    @Override    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 類圖。

3分鐘重溫抽象工廠模式(電商高頻使用)


04
  抽象工廠的優缺點


優點:

  • 抽象工廠模式具有工廠方法模式的優點,並且還可以在類的內部對產品族進行約束;

  • 增加新的產品族時,不需要修改原有系統,非常方便,符合開閉原則;

  • 具體類的建立例項過程與客戶端分離,客戶端透過工廠的抽象介面操縱例項,客戶端並不知道具體的實現是誰。

缺點:

  • 增加新的產品族時,需要修改抽象工廠和所有的具體工廠。

 


05
  抽象工廠的應用場景


以下場景中,可以考慮使用抽象工廠模式:

  • 一個系統不依賴於產品線例項如何被建立、組合和表達的細節;

  • 系統中有多於一個的產品線,而每次只使用其中某一產品線;

  • 一個產品線(或是一組沒有任何關係的物件)擁有相同的約束。

需要注意的是,使用抽象工廠模式,一般要滿足以下條件:

  • 系統中有多個產品族,每個具體工廠建立同一族但屬於不同等級結構的產品;

  • 系統一次只可能消費其中某一族產品,即同族的產品一起使用。

 


總結
 


透過本文,我們瞭解並掌握了抽象工廠模式的概念、結構、原理、使用、優缺點等。

抽象工廠模式工廠方法模式的升級版本,抽象工廠模式和工廠方法模式的構成一樣,,但它的方法個數、抽象產品的個數不同。

相較工廠方法模式,抽象工廠模式要解決的問題更為複雜。工廠方法模式只生產一個等級的產品,而抽象工廠模式可生產多個等級的產品。

以上,就是關於抽象工廠模式的全部介紹。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024924/viewspace-2996089/,如需轉載,請註明出處,否則將追究法律責任。

相關文章