抽象工廠模式是所有形態的工廠模式中最為抽象和最具一般性的一種形態。抽象工廠模式是指當有多個抽象角色時,使用的一種工廠模式。抽象工廠模式可以向客戶端提供乙個介面,使客戶端在不必指定產品的具體的情況下,建立多個產品族中的產品物件。
(一)抽象產品
1.定義人類介面,包含哭、笑、說話、性別四個屬性
/**
* 抽象人類,四個屬性
* @author ex-songtianxi001
* */
public inte***ce human
2.定義「白種人」抽象類abstractwhitehuman實現了人類介面human
public abstract class abstractwhitehuman implements human;
/*哭*/
public void cry() ;
/*說話*/
public void talk() ;
}
3.定義「黃種人」抽象類abstractyellowhuman實現人類介面human
public abstract class abstractyellowhuman implements human;
/*哭*/
public void cry() ;
/*說話*/
public void talk() ;
}
3.定義「黑種人」抽象類abstractblackhuman實現人類介面human
public abstract class abstractblackhuman implements human;
/*哭*/
public void cry() ;
/*說話*/
public void talk() ;
}
(二)具體產品
1.「黃種人」男性
public class yellowmalehuman extends abstractyellowhuman;
}
2.「黃種人」女性
public class yellowfemalehuman extends abstractyellowhuman;
}
3.「白種人」男性
public class whitemalehuman extends abstractwhitehuman;
}
4.「白種人」女性
public class whitefemalehuman extends abstractwhitehuman;
}
5.「黑人」男性
public class blackmalehuman extends abstractblackhuman;
}
6.「黑人」女性
public class blackfemalehuman extends abstractblackhuman;
}
(三)抽象工廠
1.定義工廠類介面
/**
* 抽象工廠模式
* @author ex-songtianxi001
* */
public inte***ce inte***cehumanfactory
2.定義工廠抽象類
/**
* 抽象工廠模式
* 抽出公共方法,為了減少實現類中的**量
* @author ex-songtianxi001
* */
public abstract class abstracthumanfactory implements inte***cehumanfactory catch (exception e)
} return human;
}}
(四)具體工廠
1.男性工廠
public class malehumanfactory extends abstracthumanfactory;
// 白種人男性
public human createwhitehuman();
// 黑種人男性
public human createblackhuman();
public static void main(string args)
}
2.女性工廠
public class femalehumanfactory extends abstracthumanfactory;
//白種人女性
public human createwhitehuman();
//黑種人女性
public human createblackhuman();
public static void main(string args)
}
(五)列舉類
/**
* 為了**簡介美觀,便於管理
* @author ex-songtianxi001
* */
public enum humanenum
public string getvalue()
}
(一)優點
1.降低耦合:抽象工廠模式將具體產品的建立延遲到具體工廠的子類中,這樣將物件的建立封裝起來,可以減少客戶端與具體產品類之間的依賴,從而使系統耦合度低,這樣更有利於後期的維護和擴充套件。
2.更符合開-閉原則:新增一種產品族時,只需要增加相應的具體產品類和相應的工廠類即可。
(二)缺點
1.抽象工廠模式很難支援新種類產品的變化:
這是因為抽象工廠介面中已經確定了可以被建立的產品集合,如果需要新增新產品,此時就必須去修改抽象工廠的介面,這樣就涉及到抽象工廠類的以及所有子類的改變,這樣也就違背了「開-閉」原則。
ps:產品族和新產品區別以上面例子來說:
1)增加乙個「人妖」產品族比較容易只需要新增三個產品實體類性別分別為「黃種人妖」、「白種人妖」、「黑種人妖」
(這裡沒有任何性別歧視0.0)
,再新增乙個生產人妖工廠即可。
2)而如果新增乙個「棕色種人」,那麼不僅抽象產品和具體產品都需要增加「棕色種人」類外,對於工廠類來說不僅抽象工廠需要修改新增建立「棕色種人」的方法,而且下面的具體工廠都需要修改增加建立「棕色種人」的方法,這樣就違背了「開-閉」原則。
3)工廠方法模式新增產品容易新增產品族難,抽象工廠模式與之相反。
抽象工廠模式 抽象工廠模式
抽象工廠模式其實是圍繞了乙個超級工廠建立其他的工廠 可參考工廠模式 這個超級工廠又可以想像成是其他工廠的工廠,這種設計模式是一種建立型模式。在抽象工廠模式中,介面是負責建立乙個相關物件的工廠,不需要顯式指出其類。每個生成的工廠都能按照工廠模式提供物件。意圖提供乙個建立一系列相關或相互依賴物件的介面,...
工廠模式 抽象工廠模式
這裡使用簡單的話來講解工廠模式,不涉及程式設計 什麼是工廠模式呢?我的理解是對抽象介面例項的封裝。假如有乙個介面,有若干的實現類,代表不同的例項。傳統產生物件的方法是直接new乙個出來,對於每個例項都要new,當實現介面的類較多時會很麻煩,並且類的實現也暴露出來了。工廠模式是一種產生物件的模式,使用...
工廠模式 抽象工廠模式
子類父類代換 場景 在不同的條件下,需要建立不同的實現子類時。如網路通訊可以使用tcp udp。可以實現同乙個介面,通過工廠類根據條件 tcp或udp 來例項化不同的子類。這些子類符合黎克特制代換原則。public inte ce tlprotocol public class tcpimpleme...