《软件架构与设计模式》关于 抽象工厂模式 的一个小例子
生活随笔
收集整理的這篇文章主要介紹了
《软件架构与设计模式》关于 抽象工厂模式 的一个小例子
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
下面是題目的要求:
?
根據上面的要求,我首先是畫出了UML類圖:
接著,根據上面的UML類圖寫出源代碼:
1、抽象產品類
該類定義了產品的共性,所有的具體產品都要實現這個類
1 abstract class Burger 2 { 3 public abstract void EatBurger(); 4 } 5 6 7 abstract class Chicken 8 { 9 public abstract void EatChicken(); 10 } 11 12 13 abstract class Drink 14 { 15 public abstract void EatDrink(); 16 }?
2、具體產品類
決定了產品在客戶端中的具體行為
1 class KFCBurger : Burger 2 { 3 public override void EatBurger() 4 { 5 Console.WriteLine("I am eating KFC Burger"); 6 } 7 } 8 9 class McDonaldBurger : Burger 10 { 11 public override void EatBurger() 12 { 13 Console.WriteLine("i am eating McDonald Burger"); 14 } 15 } 16 17 class KFCChicken : Chicken 18 { 19 public override void EatChicken() 20 { 21 Console.WriteLine("i am eating KFC Chicken"); 22 } 23 } 24 25 class McDonaldChicken : Chicken 26 { 27 public override void EatChicken() 28 { 29 Console.WriteLine("i am eating McDonlad Chicken"); 30 } 31 } 32 33 34 35 class KFCDrink : Drink 36 { 37 public override void EatDrink() 38 { 39 Console.WriteLine("i am eating KFC Drink"); 40 } 41 } 42 43 class McDonaldDrink : Drink 44 { 45 public override void EatDrink() 46 { 47 Console.WriteLine("i am eating McDonlad Drink"); 48 } 49 }?
3、抽象工廠類
定義了具體工廠必須實現的接口
1 interface IFactory 2 { 3 Burger MakeBurger(); 4 Chicken MakeChicken(); 5 Drink MakeDrink(); 6 }?
4、具體工廠類
實現了如何具體的創建產品類
class KFCFactory : IFactory{public Burger MakeBurger(){return new KFCBurger();}public Chicken MakeChicken(){return new KFCChicken();}public Drink MakeDrink(){return new KFCDrink();}}class McDonaldFactory : IFactory{public Burger MakeBurger(){return new McDonaldBurger();}public Chicken MakeChicken(){return new McDonaldChicken();}public Drink MakeDrink(){return new McDonaldDrink();}}?
5、product 套餐類
class Product{private Burger _burger;private Chicken _chicken;private Drink _drink;public Burger burger{get { return _burger; }set { _burger = value; }}public Chicken chicken{get { return _chicken; }set { _chicken = value; }}public Drink drink{get { return _drink; }set { _drink = value; }}public void eatbypeople(){_burger.EatBurger();_chicken.EatChicken();_drink.EatDrink();Console.WriteLine("實在是太好吃了!");}}?
6、客戶端代碼
1 IFactory factory = null; 2 3 Console.Write("請根據不同的 K/M ,來選擇不同品牌的套餐"); 4 string Select = Console.ReadLine(); 5 6 switch (Select) 7 { 8 case "K": 9 factory = new KFCFactory(); 10 break; 11 case "M": 12 factory = new McDonaldFactory(); 13 break; 14 } 15 16 Product product1 = new Product(); 17 product1.burger = factory.MakeBurger(); 18 product1.chicken = factory.MakeChicken(); 19 product1.drink = factory.MakeDrink(); 20 product1.eatbypeople(); 21 22 Console.ReadLine();?
下面是具體的效果圖:
?
從 ?簡單工廠模式 ?到 ?工廠方法模式 ?再到現在的 ?抽象工廠模式
在這個過程的學習中,也體會到了各自模式的優缺點及改進的構成。
接下來談一談我自己的看法,歡迎大家指正。
我覺得上面的模式都是建立在 多態 的基礎上實現的,
簡單工廠模式以一個工廠類為核心來創建多個繼承抽象產品類的具體產品類。但是工廠類的本身違背了開-閉原則
工廠方法模式就是對于簡單工廠模式存在的缺點進行改進,將工廠類進行了繼承,形成了抽象工廠類和具體工廠類,那么這樣就符合了開-閉原則
而抽象工廠模式則是將工廠方法模式中具體工廠類中的工廠方法增多,變成了一組工廠方法。
?
轉載于:https://www.cnblogs.com/bldz/p/4949106.html
總結
以上是生活随笔為你收集整理的《软件架构与设计模式》关于 抽象工厂模式 的一个小例子的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: signed distance fiel
- 下一篇: fibonacci climbing-