簡單但實用的簡單工廠模式

簡單但實用的簡單工廠模式

簡單工廠模式將有關建立和初始化產品物件的工作搬到一個工廠類中,客戶端只需要根據引數呼叫工廠類的靜態方法即可使用工廠類建立的產品物件,無需承擔物件的建立工作。這樣做的好處就是將物件的建立和使用分離開來,能夠防止用來例項化一個類的資料和程式碼在多個客戶端類中到處都是,利於系統維護。

模型結構圖如下:

簡單但實用的簡單工廠模式

其中包含以下幾個角色:

Factory(工廠)

:負責實現建立所有產品例項的內在邏輯。提供了靜態方法便於外界直接呼叫。

Product(抽象產品角色)

:工廠建立所有產品物件的父類,封裝了所有產品物件的公有方法。

ConcreteProduct(具體產品角色)

:每一個具體的產品物件,需要繼承抽象產品角色。

具體實現程式碼:

// 抽象產品類abstract class Product { // 所有產品類的公共業務方法 public void methodSame() { // 實現 } // 宣告抽象業務方法 public abstract void methodDiff();}// 具體產品類 ProductAclass ProductA extends Product { @Override public void methodDiff() { }}// 具體產品類 ProductBclass ProductB extends Product { @Override public void methodDiff() { }}// 工廠類class Factory { // 靜態工廠方法 public static Product createProduct(String arg) { Product product = null; if(arg。equalsIgnoreCase(“A”)) { product = new ProductA(); } else if(arg。equalsIgnoreCase(“B”)) { product = new ProductB(); } return product; } }// 客戶端測試程式碼public class Client { public static void main(String[] args) { Product product; product = Factory。createProduct(“A”); // 透過工廠類建立產品物件 product。methodSame(); product。methodDiff(); }}

有時,為了簡化工廠模式,可以將抽象產品類和工廠類合併,將靜態工廠方法移至抽象產品類。

簡單但實用的簡單工廠模式

其主要缺點在於

工廠類集中了所有產品的建立邏輯,一旦不能正常工作,整個系統受到影響。

當引入新的產品,需要修改工廠類的原始碼,違反了開閉原則。

適用場景:

產品物件較少,工廠方法的邏輯不會太複雜。

(完)