前言
點選檢視:設計模式系列
如果你對工廠模式這個概念不是很理解,建議:設計模式-簡單工廠模式 ,設計模式-工廠方法模式
抽象工廠模式
抽象工廠模式比其它工廠模式更加抽象,抽象工廠模式適用與多個抽象類的情況下,通過工廠返回多個抽象類中你需要得到的具體子類例項。
舉例闡述抽象工廠模式:
假如中日爆發釣魚島大戰(哥哥是和平倡導者,此例完全是為了給大家展示抽象工廠模式):
中國裝備:炸彈類,坦克類,來消滅日本。
炸彈類:導彈,核彈;
坦克類:越野車,主站坦克;
戰略:
前期中國兵工廠生產:導彈,越野車,打擊日本。
後期中國兵工廠生產:核彈,主站坦克,毀滅日本。
類圖:
裝備類程式碼:
#region 炸彈系列 abstract class Bomb { abstract public void baozha(); } /// <summary> /// 導彈 /// </summary> class daodanBomb :Bomb { public override void baozha() { Console.WriteLine("我是一顆中國造導彈,來轟炸不老實的小日本!"); } } /// <summary> /// 核彈 /// </summary> class hedanBomb : Bomb { public override void baozha() { Console.WriteLine("我是一顆中國造核彈,來轟炸不老實的小日本!"); } } #endregion #region 坦克系列 abstract class Tank { abstract public void go(); } /// <summary> /// 越野車 /// </summary> class yueyeTank : Tank { public override void go() { Console.WriteLine("我是一顆中國造越野車,來踏平不老實的小日本!"); } } /// <summary> /// 主站坦克 /// </summary> class zhuzhanTank : Tank { public override void go() { Console.WriteLine("我是一顆中國造主站坦克,來踏平不老實的小日本!"); } } #endregion
工廠類程式碼
#region 中國兵工廠 abstract class chinaFactory { //裝甲車製造車間 public abstract Tank CreateTank(); //炸彈知道車間 public abstract Bomb CreateBomb(); } //兵工廠前期製造 class qianqiFactory : chinaFactory { public override Bomb CreateBomb() { //導彈 return new daodanBomb(); } public override Tank CreateTank() { //越野車 return new yueyeTank(); } } //兵工廠後期製造 class houqiFactory : chinaFactory { public override Bomb CreateBomb() { //核彈 return new hedanBomb(); } public override Tank CreateTank() { //主站坦克 return new zhuzhanTank(); } } #endregion
客戶端程式碼:(打仗)
// 備戰 class Make { //裝備 private Bomb bomb; private Tank tank; //製造加工 public Make(chinaFactory factory) { bomb = factory.CreateBomb(); tank = factory.CreateTank(); } //開始打仗 public void warStar() { //炸彈類爆炸 bomb.baozha(); //戰車類前進 tank.go(); } } public class start { public static void Main() { //大戰前期 chinaFactory qianqiMake = new qianqiFactory(); Make qianqi = new Make(qianqiMake); qianqi.warStar(); //點任意鍵,進行後期攻勢!! Console.ReadKey(); //大戰後期 chinaFactory houqiMake = new houqiFactory(); Make houqi = new Make(houqiMake); houqi.warStar(); Console.WriteLine("釣魚島是中國的,神聖不可侵犯!小日本,滾開!!"); Console.ReadLine(); } }
大戰結束,總結抽象工廠模式
由於戰爭的不可預料性,與權威的體現不可朝令夕改,恰恰體現出啦此模式的好處,因為,戰備物資部可以隨意的新增新的武器,如在炸彈類中新增反物質炸彈,只用在前期或者後期工廠中新增一個方法即可,客戶端戰場方面不用改變,可按部就班,依照從前的形式做戰。
抽象工廠模式的主要目的之一是隔離所生成的具體類,這些類被隱藏在工廠內部,完全不需要客戶端知道。因為類被隔離,所以產品類系列可以隨意改變或是交換。
具體好處還需自己體會抽象工廠模式的體系。
歡迎加入部落格左上方群,交流探討,設計模式,資料庫,c#.net,資料結構。