1. 程式人生 > >c#設計模式3抽象工廠模式(Abstract Factory)

c#設計模式3抽象工廠模式(Abstract Factory)

bubuko write col 實現 trac 技術分享 返回 lin 子類

技術分享圖片

  #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 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
 // 備戰
    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();
        }

    }
 #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 Program
    {
        static void Main(string[] args)
        {
            //大戰前期
            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();

        }
    }

這裏首先以一個生活中抽象工廠的例子來實現一個抽象工廠,
然後再給出抽象工廠的定義和UML圖來幫助大家更好地掌握抽象工廠模式,
同時大家在理解的時候,可以對照抽象工廠生活中例子的實現和它的定義來加深抽象工廠的UML圖理解。
抽象工廠模式比其它工廠模式更加抽象,抽象工廠模式適用與多個抽象類的情況下,
通過工廠返回多個抽象類中你需要得到的具體子類實例。

舉例闡述抽象工廠模式:
假如中國對邪惡國家開戰。

中國裝備:炸彈類,坦克類,來消滅邪惡國家。

炸彈類:導彈,核彈;

坦克類:越野車,主站坦克;

戰略:

前期中國兵工廠生產:導彈,越野車,打擊邪惡國家。

後期中國兵工廠生產:核彈,主站坦克,毀滅邪惡國家。

c#設計模式3抽象工廠模式(Abstract Factory)