秒懂簡單工廠模式

張哥說技術發表於2023-11-17

來源:mikechen的網際網路架構

簡單工廠模式 (Factory Pattern) 是 Java 中最常用的設計模式之一 。

簡單工廠模式實現物件的建立和物件的使用分離,將物件的建立交給專門的工廠類責,適用於工廠類責建立的物件比較少等場景中。

本文將採用圖解、原始碼方式,全面詳解簡單工廠模式透過本文,我們可以瞭解並掌握以下知識:

秒懂簡單工廠模式

01
  簡單工作模式的定義

簡單工廠模式(Simple Factory)又被稱為靜態工廠方法模式,屬於建立型設計模式,是由一個工廠物件決定建立出哪一種產品類的例項。


02
  簡單工作模式的結構

簡單工廠模式的 3 個重要構成分別是工廠類抽象產品具體產品

秒懂簡單工廠模式

  • 工廠類:負責實現建立所有例項的內部邏輯。


  • 抽象產品:所建立的所有物件的父類,負責描述所有例項所共有的公共介面。


  • 具體產品:建立目標,所有建立的物件都充當這個角色的某個具體類的例項。

 

03
  簡單工作模式的實現

下面,我們透過一個場景例子、並提供相應的原始碼,來幫助理解剖析簡單模式的具體實現。

秒懂簡單工廠模式

假設:

某手機生產廠商,原來為小米代工生產手機 。

隨著業務的擴充,這個手機生產廠商還要生產華為手機、蘋果手機。

此時,就需要使用一個單獨的類來專門生產手機,這裡就會用到簡單工廠方式。

mikechen的網際網路架構

我們來看下,用簡單工廠模式是怎樣實現的。

1) 建立抽象產品類,定義具體產品的公共介面。

首先,我們建立一個手機的抽象產品類,透過抽象方法來啟動手機。









package com.mikechen.java.design.factory.simple;
public abstract class Phone {    /**     * 產品的抽象方法,由具體的產品類去實現     */    public abstract void start();

2)建立具體產品類,繼承抽象產品類,定義生產的具體產品。

接著,我們建立各個品牌的手機,它們都繼承了其父類 Phone ,並實現了父類的 start 方法:

小米手機:








package com.mikechen.java.design.factory.simple;
public class XiaomiPhone extends Phone{    @Override    public void start() {        System.out.println("小米手機啟動");    }

華為手機:








package com.mikechen.java.design.factory.simple;
public class HuaWei Phone extends Phone{    @Override    public void start() {        System.out.println("華為手機啟動");    }

蘋果手機:








package com.mikechen.java.design.factory.simple;
public class IPhone extends Phone{    @Override    public void start() {        System.out.println("蘋果手機啟動");    }

3)建立工廠類,透過建立靜態方法,根據傳入不同引數、建立不同具體產品類的例項。

工廠類提供了一個靜態方法 createPhone 用來生產手機。

只需要傳入工廠想要生產的手機品牌,就會例項化相應品牌的手機物件:


















package com.mikechen.java.design.factory.simple;
public class PhoneFactory {    public static Phone createPhone(String type){        Phone mPhone=null;        switch (type) {            case "HuaWei":                mPhone=new HuaWeiPhone();               break;            case "xiaomi":                mPhone=new xiaomiPhone();                break;
       }        return mPhone;    }}

客戶端呼叫工廠類,傳入“HuaWei”生產出華為手機,並呼叫該手機物件的 start 方法:








package com.mikechen.java.design.factory.simple;
public class CreatPhone {    public static void main(String[]args){      PhoneFactory.createPhone ("HuaWei").start();    }}

這裡我做了簡化,真實環境中,可以根據傳入的具體產品引數,來實現具體的產品。


04
  簡單工作模式的優缺點

簡單工廠模式的優點:

  • 將建立例項的工作與使用例項的工作分開,使用者不必關心類物件如何建立,實現瞭解耦;

  • 把初始化例項時的工作放到工廠裡進行,使程式碼更容易維護。


簡單工廠模式的缺點:

  • 工廠類集中了所有例項(產品) 的建立邏輯,一旦這個工廠不能正常工作,整個系統都會受到影響;

  • 違背“開放-關閉原則”,一旦新增新產品,就需要修改工廠類的邏輯,將導致工廠邏輯過於複雜;

  • 簡單工廠模式由於使用了靜態工廠方法,靜態方法不能被繼承和重寫,會造成工廠角色無法形成基於繼承的等級結構。

 

05
  簡單工作模式的應用場景

秒懂簡單工廠模式

  • 客戶如果只知道傳入工廠類的引數,對於如何建立物件的邏輯不關心時;

  • 客戶端既不需要關心建立細節,甚至連類名都不需要記住,只需要知道型別所對應的引數;

  • 當工廠類負責建立的物件具體產品比較少時,由於建立的物件較少,不會造成工廠方法中的業務邏輯太過複雜。

 

總結
  

透過本文,我們瞭解並掌握了簡單工廠模式。

簡單工廠模式最大的優點在於實現物件的建立和物件的使用分離,將物件的建立交給專門的工廠類負責。缺點是工廠類不夠靈活,增加新的具體產品時,需要修改工廠類的判斷邏輯程式碼,當產品越來越多,工廠方法的程式碼就會非常複雜。


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

相關文章