设计模式的学习--(4)抽象工厂模式

抽象工厂模式 –产品族的创建

抽线工厂模式的定义:提供一个创建一系列相关或相互依赖对象的接口,而无须指定他们具体的类。抽象工厂模式又称为Kit模式,它是一种对象创建型模式。和工厂方法模式不同的地方在于抽象工厂模式是提供了创建一系列类的实例的工厂方法。
还是拿制造汽车来举例子:某汽车公司要制造两款汽车,一款是Mini,一款是Suv,如果利用工厂方法模式来建模的话,可以想象要创建成倍增长的类,显然不适合,那么,我们可以用抽象工厂模式来创建:

namespace AbstractFactoryModel
{
    class Program
    {
        static void Main(string[] args)
        {
           IFactory miniFactory=new MiniFactory();
            IFactory suvFactory=new SuvFactory();

            miniFactory.CreateTyre();
            miniFactory.CreateWindow();
            suvFactory.CreateTyre();
            suvFactory.CreateWindow();
            Console.ReadKey();
        }
    }

    public interface IFactory//创建工厂模型
    {
        ITyre CreateTyre();
        IWindow CreateWindow();
    }

    public interface ITyre//创建轮胎模型
    {
        void Message();
    }

    public interface IWindow//创建车窗模型
    {
        void Message();
    }

    public class MiniFactory : IFactory//创建mini汽车的工厂类
    {
        public ITyre CreateTyre()
        {
            return new MiniTyre();
        }

        public IWindow CreateWindow()
        {
            return new MiniWindow();
        }
    }
    public class SuvFactory:IFactory//创建suv汽车的工厂类
    {
        public ITyre CreateTyre()
        {
            return new SuvTyre();
        }

        public IWindow CreateWindow()
        {
            return new SuvWindow();
        }
    }

    public class MiniTyre : ITyre//创建mini汽车的轮胎
    {
        public void Message()
        {
            Console.WriteLine("Create a Mini-Tyre");
        }
    }

    public class MiniWindow : IWindow//创建mini汽车的车窗
    {
        public void Message()
        {
            Console.WriteLine("Create Mini-Window");
        }
    }
    public class SuvTyre : ITyre//创建suv汽车的轮胎
    {
        public void Message()
        {
            Console.WriteLine("Create Suv-tyre");
        }
    }
    public class SuvWindow : IWindow//创建suv汽车的车窗
    {
        public void Message()
        {
            Console.WriteLine("Create Suv-Window");
        }
    }
}

好处在于,如果我们需要创建一款卡车,那么我们直接创建一个卡车的factory(同样集成自IFactory),再创建相应的卡车的零部件类进行制造即可。
缺点在于,如果我们需要创建汽车前围板或者车门等零部件,那么我们就得修改源代码(不满足开闭原则),在接口中添加相应的方法以及其他实现类中的实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值