抽象工廠類(二)

2021-08-29 09:21:22 字數 3373 閱讀 5708

**

本次例項繼續上次 工廠方法  中的果園農場。這次,該農場公司引進塑料大棚技術,在大棚裡種植熱帶(tropical)水果和蔬菜。

/*** 水果介面

* @author

88250

* @version

1.0.0, 2007-8-13

* @see

cn.edu.ynu.sei.factorymethod.fruit

*/public

inte***ce

fruit

package

cn.edu.ynu.sei.abstractfactory;

/*** 熱帶水果

* * 

@author

88250

* @version

1.0.0, 2007-8-13

*/public

class

tropicalfruit 

implements

fruit

/*** 

@return

the name

*/public

string getname()

/*** 

@param

name the name to set

*/public

void

setname(string name)}

package

cn.edu.ynu.sei.abstractfactory;

/*** 北方水果介面

* * 

@author

88250

* @version

1.0.0, 2007-8-13

*/public

class

northernfruit 

implements

fruit

/*** 

@return

the name

*/public

string getname()

/*** 

@param

name the name to set

*/public

void

setname(string name)}

package

cn.edu.ynu.sei.abstractfactory;

/*** 蔬菜介面

* * 

@author

88250

* @version

1.0.0, 2007-8-13

* @see

cn.edu.ynu.sei.factorymethod.fruit

*/public

inte***ce

veggie

package

cn.edu.ynu.sei.abstractfactory;

/*** 北方蔬菜

* * 

@author

88250

* @version

1.0.0, 2007-8-13

*/public

class

northernveggie 

implements

veggie

/*** 

@return

the name

*/public

string getname()

/*** 

@param

name the name to set

*/public

void

setname(string name)}

package

cn.edu.ynu.sei.abstractfactory;

/*** 熱帶蔬菜

* * 

@author

88250

* @version

1.0.0, 2007-8-13

*/public

class

tropicalveggie 

implements

veggie

/*** 

@return

the name

*/public

string getname()

/*** 

@param

name the name to set

*/public

void

setname(string name)}

package

cn.edu.ynu.sei.abstractfactory;

/*** 園丁介面

* * 

@author

88250

* @version

1.0.0, 2007-8-13

*/public

inte***ce

gardener

package

cn.edu.ynu.sei.abstractfactory;

/*** 北方園園丁

* * 

@author

88250

* @version

1.0.0, 2007-8-13

*/public

class

northengardener 

implements

gardener

@override

public

veggie createveggie(string name)}

package

cn.edu.ynu.sei.abstractfactory;

/*** 熱帶園園丁

* * 

@author

88250

* @version

1.0.0, 2007-8-13

*/public

class

tropicalgardener 

implements

gardener

@override

public

veggie createveggie(string name)}

當增加新的產品等級結構時就需要修改相關的具體工廠**。例如在農場公司系統中有一種熱帶水果類別繼承於現用熱帶水果類別,這時我們不得不修改熱帶水果具體工廠的**,新增加乙個工廠方法給它。這樣是不符合ocp的。

所以抽象工廠只是在一定程度上支援ocp的,在設計的時候這點很值得我們注意。

抽象工廠類

抽象工廠模式是工廠模式的進一步抽象 他們的區別如下 工廠方法模式 乙個抽象產品類,可以派生出多個具體產品類。乙個抽象工廠類,可以派生出多個具體工廠類。每個具體工廠類只能建立乙個具體產品類的例項。抽象工廠模式 多個抽象產品類,每個抽象產品類可以派生出多個具體產品類。乙個抽象工廠類,可以派生出多個具體工...

抽象工廠模式 抽象工廠模式

抽象工廠模式其實是圍繞了乙個超級工廠建立其他的工廠 可參考工廠模式 這個超級工廠又可以想像成是其他工廠的工廠,這種設計模式是一種建立型模式。在抽象工廠模式中,介面是負責建立乙個相關物件的工廠,不需要顯式指出其類。每個生成的工廠都能按照工廠模式提供物件。意圖提供乙個建立一系列相關或相互依賴物件的介面,...

工廠三兄弟之抽象工廠模式(二)

在工廠方法模式中具體工廠負責生產具體的產品,每乙個具體工廠對應一種具體產品,工廠方法具有唯一性,一般情況下,乙個具體工廠中只有乙個或者一組過載的工廠方法。但是有時候我們希望乙個工廠可以提供多個產品物件,而不是單一的產品物件,如乙個電器工廠,它可以生產電視機 電冰箱 空調等多種電器,而不是只生產某一種...