设计模式之抽象工厂模式

前文中介绍了简单工厂模式和工厂方法模式,本文介绍工厂模式中的最后一种:抽象工厂模式。

应用场景:假设现在要模拟汽车生产这样一个过程,我们知道汽车生产包括:车门的生成、轮子的生产等等;

不同的汽车厂商生成的车门、轮子是不相同的,但所有的汽车都是由轮子、车门这些部件组成的,汽车的构成

是不变的,并且轮子、车门是构成汽车的一系列的对象,我们把构成一个事物的一系列抽象对象,封装成一个

抽象工厂,具体的事物(如宝马车)继承自这个抽象工厂,然后实现相关的接口即可。

代码:

namespace ConsoleTest.test
{
   public class AbstractFactoryTest
    {
       private CarFactory cf;

       public void Test()
       {
           cf = new BMWFactory(); //
           cf.CreateDoor();
           cf.CreateWheel();

           Console.ReadLine();
       }

    }

    /// <summary>
    /// 表示汽车的抽象工厂。
    /// </summary>
    abstract class CarFactory
    {
        public abstract IWheel CreateWheel();

        public abstract IDoor CreateDoor();
    }

    /// <summary>
    /// 轮子接口。
    /// </summary>
    interface IWheel
    {
        IWheel Create();
    }

    /// <summary>
    /// 车门接口。
    /// </summary>
    interface IDoor
    {
        IDoor Create();
    }

    /// <summary>
    /// 生产宝马车的工厂。
    /// </summary>
    class BMWFactory : CarFactory
    {
        /// <summary>
        /// 生成轮子。
        /// </summary>
        /// <returns></returns>
        override public IWheel CreateWheel()
        {
            return new BMWWheel().Create();
        }

        /// <summary>
        /// 生成车门。
        /// </summary>
        /// <returns></returns>
        override public IDoor CreateDoor()
        {
            return new BMWDoor().Create();
        }
    }

    /// <summary>
    /// 宝马轮子。
    /// </summary>
    class BMWWheel : IWheel
    {
       public IWheel Create()
        {
           Console.WriteLine("生成宝马轮子...");
           return this;
        }
    }

    /// <summary>
    /// 宝马车门。
    /// </summary>
    class BMWDoor : IDoor
    {
        
        public IDoor Create()
        {
            Console.WriteLine("生成宝马车门...");
            return this;
        }
    }
}

从代码可以看出,在具体的客户类AbstractFactoryTest中只需要保存抽象工厂类CarFactory就可以了,在使用时动态实例化为需要的工厂(BMWFactory),这样就将客户类与具体的对象解耦了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值