工廠模式分為簡單工廠模式,工廠方法模式和抽象工廠模式。
(1)簡單工廠模式
簡單工廠模式並不是乙個設計模式,看起來更像是一種程式設計模式,但是由於經常被使用就被稱之為一種設計模式。例如:
public
class pizzastore
pizza orderpizza(string type)
}
因為pizza = factory.createpizza(type);是乙個根據不同的場景會變化的**塊,所以把這一塊**抽取出來形成乙個工廠類
public
class ******pizzafactory else
if(type.equals(
"clam"))
return pizza;
}}
當需要建立不同的產品時只需要改變工廠類中的**就可以,而pizzastore 並不關心。
public
class pizza
}void bake()
void cut()
void box()
public string getname()
}
加長pizza類就是乙個完整的簡單工廠模式。
(2)工廠方法模式
所有的工廠模式都是用來封裝物件的建立,工廠方法模式通過讓子類決定該建立的物件是什麼,來達到將物件的過程進行封裝的目的。
同樣還是上面的例子,當pizzastore要引進不同的風味時,簡單工廠模式就不能很方便的實現。所以在createpizza時就需要根據不同的pizzastore來建立,那麼新的pizzastore為:
public
abstract
class pizzastore
public
abstract pizza createpizza(string type);
}
將createpizza方法抽象出來,由pizzastore的子類去實現要建立什麼樣的pizza。
例如建立乙個ny風格和chicago風格的pizza;
public
class
nystylecheesepizza
extends
pizza
}
public
class
nystylepizzastore
extends
pizzastore
return pizza;
}}
這樣就形成了乙個工廠方法模式的例子。總的來說工廠方法模式定義了乙個建立物件的介面,但由子類決定例項化的是哪乙個,工廠方法讓類把例項化推遲到子類。
那麼工廠方法模式和簡單工廠模式的區別是什麼呢?
簡單工廠把全部的事情在乙個地方就處理完了,然而工廠方法模式建立了乙個框架,讓子類決定如何實現。簡單工廠不具備工廠方法的彈性,因為簡單工廠不能更改已經在建立的產品。
(3)抽象工廠模式
抽象工廠模式提供了乙個介面,用於建立相關或依賴物件的家族,而不需要明確指定類。抽象工廠模式允許客戶使用抽象的介面來實現一組相關的產品,而不需要實際產出的具體是什麼,這樣一來客戶就從具體的產品中被解耦。
還是上面的例子,由於ny和chicago是處於不同的地方,所以產品在原料上也會有很大的區別,所以根據不同的商店使用不同的原料。
public
inte***ce pizaaingredientfactory
定義乙個介面,負責建立所有的原料。那麼下一步需要做的事就是
1、為每乙個區域建立乙個工廠;
2、實現一組原料類供工廠使用;
3、然後將這些組織起來,將新的原料工廠放到以前的pizzastore中。
ny原料工廠的實現:
public
class
nypizzaingredientfactory
implements
pizaaingredientfactory
@override
public sauce createsauce()
@override
public clams createclams()
}
其中省略了一部分原料的實現都一樣,chicago原來工廠:
public
class
chicagopizzaingredientfactory
implements
pizaaingredientfactory
@override
public sauce createsauce()
}
原料類,其他的類似。。。。。
public
class
thickcrustdough
implements
dough
}
然後重新實現pizza類
public
abstract
class pizza
void cut()
void box()
public string getname()
public
void
setname(string name)
}
特定的cheesepizza,其他的類似。。。。
public
class
cheesepizza
extends
pizza
@override
void prepare()
}
重新實現nypizzastore….,其他的類似。,,
public
class
nypizzastore
extends
pizzastore
return pizza;
}}
那麼乙個抽象工廠也就實現了,通過以上的**,引入了新的工廠來原件新的原料家族。測試。。。
public
class abstractfactorytest
}
總結:
簡單工廠,雖然不是真正的設計模式,但是可以將程式從具體類中解耦。
工廠方法模式使用繼承,把物件委託給子類,子類實現工廠方法來建立物件。
抽象工廠使用組合,物件的建立被實現在工廠介面所暴露的方法中。
所有的工廠模式都是通過減少應用程式和具體類之間的耦合。
設計模式 工廠模式 抽象工廠模式
建立物件時不會對客戶暴露建立邏輯,並且通過使用乙個共同的介面來指向建立的物件。sept1 建立乙個公共介面,將要對外開放的方法在這裡定義。sept2 建立實現介面的類,用即實現對外開放的類的方法 sept3 建立工廠,提供乙個get方法,這個方法提供返回實現類的物件 建立選擇 sept4 使用,建立...
設計模式 工廠設計模式
用於建立物件的介面,交給子類去實現 我們舉乙個生產nokia的例子 public abstract class nokiaphone先試定義了乙個抽象類,抽象出方法poweronphone 模擬手機開機的動作 public class nokia5200 extends nokiaphone pub...
設計模式 工廠設計模式
工廠模式分為工廠方法模式和抽象工廠模式 工廠方法模式分為 普通工廠模式,就是建立乙個工廠類,對實現了同一介面的一些類進行例項的建立。多個工廠方法模式,是對普通工廠方法模式的改進,在普通工廠方法模式中,如果傳遞的字串出錯,則不能正確建立物件,而多個工廠方法模式是提供多個工廠方法,分別建立物件。靜態工廠...