設計模式 工廠方法模式

2021-06-01 05:47:41 字數 1692 閱讀 8268

一 、工廠方法(factory method)模式

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

二、 工廠方法模式角色與結構

抽象工廠(creator)角色:是工廠方法模式的核心,與應用程式無關。任何在模式中建立的物件的工廠類必須實現這個介面。

具體工廠(concrete creator)角色:這是實現抽象工廠介面的具體工廠類,包含與應用程式密切相關的邏輯,並且受到應用程式呼叫以建立產品物件。在下圖中有兩個這樣的角色:bulbcreator與tubecreator。

抽象產品(product)角色:工廠方法模式所建立的物件的超型別,也就是產品物件的共同父類或共同擁有的介面。在下圖中,這個角色是light。

具體產品(concrete product)角色:這個角色實現了抽象產品角色所定義的介面。某具體產品有專門的具體工廠建立,它們之間往往一一對應。

三、乙個簡單的例項

// 產品 plant介面

public inte***ce plant

//具體產品planta,plantb

public class planta implements plant

public void dosomething()

}public class plantb implements plant

public void dosomething()

}// 產品 fruit介面

public inte***ce fruit

//具體產品fruita,fruitb

public class fruita implements fruit

public void dosomething()

}public class fruitb implements fruit

public void dosomething()

}// 抽象工廠方法

public inte***ce abstractfactory

//具體工廠方法

public class factorya implements abstractfactory

public fruit createfruit()

}public class factoryb implements abstractfactory

public fruit createfruit()

}

四、工廠方法模式與簡單工廠模式

工廠方法模式與簡單工廠模式再結構上的不同不是很明顯。工廠方法類的核心是乙個抽象工廠類,而簡單工廠模式把核心放在乙個具體類上。

工廠方法模式之所以有乙個別名叫多型性工廠模式是因為具體工廠類都有共同的介面,或者有共同的抽象父類。

當系統擴充套件需要新增新的產品物件時,僅僅需要新增乙個具體物件以及乙個具體工廠物件,原有工廠物件不需要進行任何修改,也不需要修改客戶端,很好的符合了"開放-封閉"原則。而簡單工廠模式在新增新產品物件後不得不修改工廠方法,擴充套件性不好。

工廠方法模式退化後可以演變成簡單工廠模式。

設計模式 工廠方法模式

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...

設計模式 工廠方法模式

描述一下工廠方法的概要 簡單工廠模式是要在工廠類中通過資料來做個決策,在工廠類中的多個類中例項化出來其中乙個要用到的類,做運算。而工廠方法模式則是他的乙個聰明的擴充套件,不在工廠類中做決策,而是把這個決策推遲到每個用到他的地方。等待使用的類庫 live類 public abstract class ...