c#设计模式3抽象工厂模式(Abstract Factory)

  #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图理解。
抽象工厂模式比其它工厂模式更加抽象,抽象工厂模式适用与多个抽象类的情况下,
通过工厂返回多个抽象类中你需要得到的具体子类实例。

举例阐述抽象工厂模式:
假如中国对邪恶国家开战。

中国装备:炸弹类,坦克类,来消灭邪恶国家。

炸弹类:导弹,核弹;

坦克类:越野车,主站坦克;

战略:

前期中国兵工厂生产:导弹,越野车,打击邪恶国家。

后期中国兵工厂生产:核弹,主站坦克,毁灭邪恶国家。

猜你喜欢

转载自www.cnblogs.com/zuochanzi/p/8875262.html
今日推荐