設計模式 工廠方法模式

2021-08-07 04:41:30 字數 1963 閱讀 3177

這一篇博文來介紹工廠模式中的第二種工廠方法模式。

工廠方法模式(factory method pattern)又稱為工廠模式,也叫虛擬構造器(virtual constructor)模式或者多型工廠(polymorphic factory)模式,它屬於類建立型模式。在工廠方法模式中,工廠父類負責定義建立產品物件的公共介面,而工廠子類則負責生成具體的產品物件,這樣做的目的是將產品類的例項化操作延遲到工廠子類中完成,即通過工廠子類來確定究竟應該例項化哪乙個具體產品類。

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

基於工廠角色和產品角色的多型性設計是工廠方法模式的關鍵。它能夠使工廠可以自主確定建立何種產品物件,而如何建立這個物件的細節則完全封裝在具體工廠內部。工廠方法模式之所以又被稱為多型工廠模式,是因為所有的具體工廠類都具有同一抽象父類。

使用工廠方法模式的另乙個優點是在系統中加入新產品時,無須修改抽象工廠和抽象產品提供的介面,無須修改客戶端,也無須修改其他的具體工廠和具體產品,而只要新增乙個具體工廠和具體產品就可以了。這樣,系統的可擴充套件性也就變得非常好,完全符合「開閉原則」。

在新增新產品時,需要編寫新的具體產品類,而且還要提供與之對應的具體工廠類,系統中類的個數將成對增加,在一定程度上增加了系統的複雜度,有更多的類需要編譯和執行,會給系統帶來一些額外的開銷。

由於考慮到系統的可擴充套件性,需要引入抽象層,在客戶端**中均使用抽象層進行定義,增加了系統的抽象性和理解難度,且在實現時可能需要用到dom、反射等技術,增加了系統的實現難度。

public

abstract

class pay

public

abstract

void

orderpay();

}

支付寶支付類

public

class

alipay

extends

pay

}

public

class

wechatpay

extends

pay

}

銀聯支付類

public

class

unionpay

extends

pay

}

抽象工廠類

public

abstract

class payfactory

支付寶工廠類

public

class

alipayfactory

extends

payfactory

}

public

class

wechatpayfactory

extends

payfactory

}

銀聯工廠類

public

class

unionpayfactory

extends

payfactory

}

具體**見github位址

工廠方法模式可以說是簡單工廠模式的進一步優化,解決了對修改開放的問題,又保持了簡單工廠模式的優點。唯一的缺點就是增加新產品的同時需要增加新的工廠,導致系統類的個數成對增加,在一定程度上增加了系統的複雜性。

類似的案例有日誌記錄器(選擇記錄檔案、資料庫。。。)、資料庫連線(連線不同的資料庫)

設計模式 工廠方法模式

一 工廠方法 factory method 模式 工廠方法模式的意義是定義乙個建立產品物件的工廠介面,將實際建立工作推遲到工廠子類當中。核心工廠類不再負責產品的建立,這樣核心類成為乙個抽象工廠角色,僅負責具體工廠子類必須實現的介面,這樣進一步抽象化的好處是使得工廠方法模式可以使系統在不修改具體工廠角...

設計模式 工廠方法模式

1 factorymethod.h ifndef factorymethod h define factorymethod h include include using namespace std class osproduct 產品,product,產品的抽象類 class windowspro...

設計模式 工廠方法模式

框架的基礎知識 對框架的理解 框架和設計模式的關係 工廠方法模式 定義 定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類,factory method使乙個類的例項化延遲到其子類。結構 產品 public inte ce product 具體產品 public class productimpl...