工厂设计模式

工厂设计模式

  1. 工厂方法模式的介绍

    动机(Motivate)

       在软件系统的构建过程中,经常面临着“某个对象”的创建工作:由于需求的变化,这个对象(的具体实现)经常面临着剧烈的变化,但是它却拥有比较稳定的接口。
    

如何应对这种变化?如何提供一种“封装机制”来隔离出“这个易变对象”的变化,从而保持系统中“其他依赖对象的对象”不随着需求改变而改变?

  1. 模式的组成

      可以看出,在工厂方法模式的结构有以下角色:
    
      (1)、抽象工厂角色(Creator): 充当抽象工厂角色,定义工厂类所具有的基本的操作,任何具体工厂都必须继承该抽象类。
    
      (2)、具体工厂角色(ConcreteCreator):充当具体工厂角色,该类必须继承抽象工厂角色,实现抽象工厂定义的方法,用来创建具体产品。
    
      (3)、抽象产品角色(Product):充当抽象产品角色,定义了产品类型所有具有的基本操作,具体产品必须继承该抽象类。
    
      (4)、具体产品角色(ConcreteProduct):充当具体产品角色,实现抽象产品类对定义的抽象方法,由具体工厂类创建,它们之间有一一对应的关系。
    
  2. 设计模式原则
    工厂设计模式:
    遵循了OCP原则,中文是【开放关闭原则】,对增加代码开发,对修改代码关闭,。

  3. 具体的代码

namespace DesignPattern
{
    /// <summary>
    /// 汽车抽象类
    /// </summary>
    public abstract class Car
    {
        public abstract void print();
    }
        /// <summary>
    /// 生产宝马这辆车
    /// </summary>
     public class BMWCar : Car
    {
        public override void print()
        {
            Console.WriteLine("生产宝马汽车");
        }
    }
       /// <summary>
    /// 生产保时捷这辆车
    /// </summary>
    public class PorscheCar : Car
    {
        public override void print()
        {
            Console.WriteLine("生产保时捷汽车");
        }
    }
    /// <summary>
    /// 抽象工厂类
    /// </summary>
    public abstract class Creator
    {
        public abstract Car CreateCarFactory();
    }
     /// <summary>
    /// 宝马工厂类
    /// </summary>
    public class BMWFactory : Creator
    {
        public override Car CreateCarFactory()
        {
            return new BMWCar();
        }
    }
     /// <summary>
    /// 客户端调用
    /// </summary>
    public class FactoryMode
    {
    /*使用工厂方法实现的系统,如果系统需要添加新产品时,我们可以利用多态性来完成系统的扩展,
        对于抽象工厂类和具体工厂中的代码都不需要做任何改动。*/
               public static void Main(string[] args)
        {
            Creator bmwFactory = new BMWFactory();
            Car bmwCar = bmwFactory.CreateCarFactory();
            bmwCar.print();
            Console.ReadKey();
        }
    }
}

5.优缺点
有点:扩展开放,修改关闭
缺点: 一个工厂只做一种产品,显示生活中很少,抽象工厂可以解决这个问题

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦想家NO1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值