工廠方法模式

2021-09-19 03:19:07 字數 2000 閱讀 9327

定義乙個用於建立物件的介面,但是讓子類來決定到底建立哪乙個例項。工廠方法模式讓乙個類的例項化延遲到其子類。

簡單來說是來為了解決簡單工廠模式所出現的一些缺點而進行的改進。比如當乙個簡單的工廠模式要生產乙個飛機。能夠生產***,戰鬥機,波音747.但是如果要新增乙個水上飛機。那麼就要修改源**,也就是修改工廠的源**!新增乙個業務邏輯,顯然不符合開閉原則,所以就有了工廠方法模式。提供乙個抽象工廠方法模式,這樣就可以避免新增的時候修改源**,只要新建乙個類來繼承了工廠方法模式即可。

工廠方法模式,是簡單工廠模式的公升級。完成了一些簡單工廠模式不能完成的事情。

優點:在工廠方法模式中,工廠方法用來建立客戶所需要的產品,同時還向客戶端隱藏了哪種具體產品類將被例項化這一細節,使用者只需要關心所需要產品對應的工廠,無須關心建立細節,甚至無須知道具體產品類的類名。

基於工廠角色和產品角色的多型性設計是工廠方法的關鍵,他能夠讓工廠模式自主的建立產品物件,而如何建立這個物件的細節完全封裝在工廠類。

使用工廠方法模式最大的優點就是你新加類的時候不用動源**,只要寫新的產品新的工廠來繼承對應的類就行了。

缺點:既是優點又是缺點,你要新加型別的時候,既要建立產品類,又要建立工廠類,增加了一大波類。在一定的程度上增加系統的複雜度。

由於考慮到系統的可在性,需要引入抽象層,在客戶·端**中均用抽象定義,更加難以理解!

1、客戶端不知道它所需要的物件的類,在工廠方法模式中,客戶端不需要具體產品類的類名,只需要知道所對應的工廠即可,具體產品物件由具體工廠類建立,可見具體產品類的類名在配置檔案或者資料庫中存在!

2、抽象工廠類通過其子類來指定建立那個產品類,用父類來新建子類可以提高可擴充套件性。

來乙個實際的例子:日誌系統。

首先是產品類,充當抽象產品角色。

package factorymethodpattern;

public inte***ce logger

databaselogger:資料庫日誌記錄器,充當具體產品角色。

package factorymethodpattern;

public class databaselogger implements logger

}

filelogger:檔案日誌記錄器,充當具體產品角色。

package factorymethodpattern;

public class filelogger implements logger

}

logge***ctory:日誌記錄器工廠介面,充當抽象工廠角色。

package factorymethodpattern;

public inte***ce logge***ctory

package factorymethodpattern;

public class databaselogge***ctory implements logge***ctory

}

filelogge***ctory:檔案日誌工廠

package factorymethodpattern;

public class filelogge***ctory implements logge***ctory

}

client測試類

package factorymethodpattern;

public class client

}

控制台輸出

檔案日誌記錄。

資料庫日誌記錄。

工廠方法模式是簡單工廠方法模式的公升級。主要由抽象工廠類、抽象產品類、具體工廠類、具體產品類。主要的用途就是用來建立物件!我們只需要提供類名,然後由具體的工廠類去幫我們建立物件就夠了,賊好用!在不需要新加很多態別,並且建立物件非常麻煩得時候工廠方法模式是乙個非常好的模式。

工廠方法模式 工廠方法模式

工廠方法模式是簡單工廠模式的公升級版,簡單工廠模式不符合設計模式的原則 即 單一職責,開閉原則 優點 職責明確,擴充套件方便 缺點 需要建立多個工廠 實現步驟 1.將工廠通用方法抽取介面 例如 ifactory 2.將產品抽取介面 例如 icar 3.實現各種產品 例如 baomacar,benti...

工廠方法模式 工廠方法模式 二

工廠方法模式是對簡單工廠的進一步抽象和封裝,需要新的類物件時不需要對既有工廠類進行修改,而是增加新的工廠類。工程類可以使用模版進一步封裝,由編譯器來生成 從而減少 編寫工作量。工廠方法的 c 實現01part產品抽象基類class animal virtual void show 0 02part產...

工廠方法模式(一) 簡單工廠方法模式

ps 第二篇學習部落格,堅持就是勝利。繼續設計模式的學習,記錄工廠模式,加深自己的理解。基本結構 abstractproduct 用來定義基本的商品的抽象 public abstract class abstractphoneproduct 用來實現抽象商品,生成各種商品 public class ...