设计模式之工厂方法

在上一节中介绍了简单工厂模式,这一节中介绍工厂方法。还是拿上节中提到的汽车的例子来说明,

每一辆汽车都有车门、轮子等组成,这是汽车的共性,但是不同品牌的汽车生产的车门、轮子等这

些汽车的部件是不相同的,我们要做的工作就是“抽象出共性,开放出个性”。由于汽车的装配必须

要经过车门生产这个环节,所以我们把车门生产抽象出来作为一个工厂方法,不同的厂商去具体实现

这个方法,从而生产出不同的汽车。代码如下:

namespace ConsoleTest.test
{
   public class FactoryMethodTest
    {
       public void Test()
       {
           Car car = new Bens();
           car.Create();

           Console.Read();
       }

    }

    class Car
    {
        /// <summary>
        /// 创建一辆汽车
        /// </summary>
        /// <returns></returns>
        virtual public Car Create()
        {
            Console.WriteLine("begin create......");

            this.door = CreateDoor();//注意这里用到了工厂方法

            Console.WriteLine("......");

            Console.WriteLine("end create......");

            return this;

        }

        /// <summary>
        /// 这是一个工厂方法,具体要创建什么样的门,由子类来确定
        /// </summary>
        /// <returns></returns>
        virtual protected Door CreateDoor()
        {
            Console.WriteLine("create door");
            return new Door();
        }

        protected Door door;
    }



    class Bens : Car
    {
        public override Car Create()
        {
            Console.WriteLine("create bens");
            return base.Create();
        }

        /// <summary>
        /// 工厂方法的具体实现
        /// </summary>
        /// <returns></returns>
        protected override Door CreateDoor()
        {
            Console.WriteLine("create bens door");
            return new BensDoor();
        }
    }


    class BMW : Car
    {

        public override Car Create()
        {
            Console.WriteLine("create bmw");
            return base.Create();
        }

        /// <summary>
        /// 工厂方法的具体实现
        /// </summary>
        /// <returns></returns>
        protected override Door CreateDoor()
        {
            Console.WriteLine("create bmw door");
            return new BMWDoor();
        }
    }

    class Door
    {
       
    }

    class BensDoor : Door
    {
       
    }

    class BMWDoor : Door
    {
       
    }
}
从上面的代码可以看成,工厂方法其实也是比较好理解的。上面的代码中Car的Create方法,其实用到了另外一种设计模式——模板方法。

在后面的文章中会继续介绍,今天先到这里,继续上班。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值