簡單工廠模式

2021-08-21 17:34:54 字數 1390 閱讀 1970

簡單工廠模式並不屬於gof的23種設計模式。

例子:假如存在乙個水果類fruit:該類有乙個帶引數的建構函式,用來初始化水果名稱;還有乙個獲取水果名稱的成員函式。       

fruit(string name) 

else if (name == "banana")

else if (name == "pear")

}

void getname() 

else if (name == "banana")

else if (name == "pear")

}

不難看出,該類包含了大量的條件語句;並且fruit類的職責太重,負責初始化和顯示所有的水果物件,將各種水果物件的初始化**和顯示**集中在乙個類中實現,違反了「單一職責原則」,不利於類的重用和維護;當需要增加新型別的水果時,必須修改fruit類的源**,違反了「開閉原則」。

工廠(factory)角色:簡單工廠模式的核心,它負責實現建立所有例項的內部邏輯、工廠類可以被外界直接呼叫,建立所需的產品物件。

抽象產品(abstractproduct)角色:簡單工廠模式所建立的所有物件的父類,它負責描述所有例項所共有的公共介面。

具體產品(concreteproduct)角色:簡單工廠模式所建立的具體例項物件。

//抽象產品

class abstractfruit ;

//具體產品

public:

virtual void showfruitname()

};//具體產品

class orange : public abstractfruit

};//工廠

class fruitfactory

else if (flag == "orange")

else

}};void test()

int main(int argc, char **argv)

優點:

實現了物件建立和使用的分離;

不需要記住具體類名,記住引數即可,減少使用者記憶量。

缺點:對工廠類職責過重,一旦不能工作,系統將會受到影響;

增加系統中類的個數,複雜度和理解度增加;

違反「開閉原則」,新增新產品時需要修改工廠邏輯,工廠越來越複雜。

工廠類負責建立的物件較少,由於建立的物件較少,不會造成工廠方法中的業務邏輯太過複雜;

客戶端只知道傳入工廠類的引數,對如何建立物件並不關心。

工廠模式 簡單工廠

簡單工廠其實並不是乙個設計模式,反而比較像一種程式設計習慣。我個人的這樣總結簡單工廠 建立乙個類,封裝建立物件的 故事 現在我要開一家披薩店,叫bbk 必敗客 披薩,賣很多種披薩 芝士披薩 榴蓮披薩等等,我有乙個orderpizza string type 方法,根據客戶傳來的type來提供不同的披...

工廠模式 簡單工廠

工廠 處理建立物件的細節。目的 將例項化具體類的 從應用中抽離,或者封裝起來,可以避免干擾應用的其他部分。簡單工廠 簡單工廠其實不是乙個設計模式,反而像一種程式設計習慣。產品實現 desc 產品a public inte ce a class a1 implements a override pub...

簡單工廠模式,工廠模式,抽象工廠模式

三種模式看了一天,記錄下自己的理解 headfirst,比薩店為例 1,簡單工廠模式 乙個具體的工廠類 pizzafactory 乙個抽象的產品類pizza,可以派生出多個具體的產品類 客戶 pizzastore類 工廠類 pizzafactory類關聯產品類pizza,工廠生產出不同型別的pizz...