抽象工廠模式

抽象工廠UML.png
interface Shoe{
void wear();
}
定義鞋類(lèi)接口,定義公共方法穿鞋子。
interface Hat{
void wear();
}
定義帽子類(lèi)接口,定義公共方法戴帽子。
class LeatherShoe implements Shoe{
public LeatherShoe(){
}
public void wear(){
//穿皮鞋
}
}
皮鞋實(shí)體類(lèi)
class ClothShoe implements Shoe{
public ClothShoe(){
}
public void wear(){
//穿布鞋
}
}
布鞋實(shí)體類(lèi)
class LeatherHat implements Hat{
public LeatherHat(){
}
public void wear(){
//帶皮帽
}
}
皮帽實(shí)體類(lèi)
class ClothHat implements Hat{
public ClothHat(){
}
public void wear(){
//戴草帽
}
}
草帽實(shí)體類(lèi)
interface Factory{
Shoe createShoe();
Hat creatHat();
}
工廠接口
class ClothFactory implements Factory{
public Shoe createShoe(){
ClothShoe clothShoe = new ClothShoe();
return clothShoe;
}
public Hat creatHat(){
ClothHat clothHat = new ClothHat();
return clothHat;
}
}
布料工廠類(lèi)
class LeatherFactory implements Factory{
public Shoe createShoe(){
LeatherShoe leatherShoe = new LeatherShoe();
return leatherShoe;
}
public Hat creatHat(){
LeatherHat leatherHat = new LeatherHat();
return leatherHat;
}
}
皮料工廠類(lèi)
class Client{
public static void main(String args[]){
Shoe mShoe;
Hat mHat;
Factory mFactory;
mFactory = new ClothFactory();//創(chuàng)建布料工廠
mShoe = mFactory.createShoe();//工廠生產(chǎn)鞋
mHat = mFactory.creatHat();//工廠生產(chǎn)帽子
mShoe.wear();//穿布鞋
mHat.wear();//戴帽子
}
}
客戶(hù)端
優(yōu)點(diǎn)
- 抽象工廠模式隔離了具體類(lèi)的生成,使得客戶(hù)并不需要知道什么被創(chuàng)建。由于這種隔離, 更換一個(gè)具體工廠就變得相對(duì)容易,所有的具體工廠都實(shí)現(xiàn)了抽象工廠中定義的那些公共接 口,因此只需改變具體工廠的實(shí)例,就可以在某種程度上改變整個(gè)軟件系統(tǒng)的行為。
- 當(dāng)一個(gè)產(chǎn)品族中的多個(gè)對(duì)象被設(shè)計(jì)成一起工作時(shí),它能夠保證客戶(hù)端始終只使用同一個(gè)產(chǎn) 品族中的對(duì)象。
- 增加新的產(chǎn)品族很方便,無(wú)須修改已有系統(tǒng),符合“開(kāi)閉原則”。
缺點(diǎn)
- 增加新的產(chǎn)品等級(jí)結(jié)構(gòu)麻煩,需要對(duì)原有系統(tǒng)進(jìn)行較大的修改,甚至需要修改抽象層代碼, 這顯然會(huì)帶來(lái)較大的不便,違背了“開(kāi)閉原則”。