C#设计模式之-简单工厂模式

简单工厂模式属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GoF设计模式之一。学习简单工厂模式是学习其它工厂模式的前提条件。

简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。
角色:

1、工厂(Factory)

简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象;

2、抽象产品(Product)

简单工厂模式所创建的所有对象的抽象基类,它负责描述所有实例所共有的公共接口;

3、具体产品(Concrete Product)

这是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。
示例:

namespace Design_Patterns
{
    public class FactoryMode
    {
        static void Main(string[] args)
        {
            Operation operation = CalculatorFactory.GetOperation("+");
            operation.NumberA = 10;
            operation.NumberB = 5;
            double result = operation.GetResult();
            System.Console.WriteLine("10+5=" + result);

            Operation operation1 = CalculatorFactory.GetOperation("*");
            operation1.NumberA = 10;
            operation1.NumberB = 5;
            double result1 = operation.GetResult();
            System.Console.WriteLine("10*5=" + result1);

            System.Console.ReadKey();
        }
    }
    /// <summary>
    /// 算法基类
    /// </summary>
    public abstract class Operation
    {
        public double NumberA { get; set; }
        public double NumberB { get; set; }
        public virtual double GetResult()
        {
            return 0;
        }
    }
    /// <summary>
    /// 加法
    /// </summary>
    public class Operation_Add : Operation
    {
        public override double GetResult()
        {
            return NumberA + NumberB;
        }
    }
    /// <summary>
    /// 减法
    /// </summary>
    public class Operation_Minus : Operation
    {
        public override double GetResult()
        {
            return NumberA - NumberB;
        }
    }
    /// <summary>
    /// 乘法
    /// </summary>
    public class Operation_Multi : Operation
    {
        public override double GetResult()
        {
            return NumberA * NumberB;
        }
    }
    /// <summary>
    /// 除法
    /// </summary>
    public class Operation_Div : Operation
    {
        public override double GetResult()
        {
            return NumberA / NumberB;
        }
    }
    /// <summary>
    /// 计算器工厂,根据不同的运算符号生产不同的对象
    /// </summary>
    public class CalculatorFactory
    {
        public static Operation GetOperation(string sign)
        {
            Operation operation = null;
            switch (sign)
            {
                case "+":
                    operation = new Operation_Add();
                    break;
                case "-":
                    operation = new Operation_Minus();
                    break;
                case "*":
                    operation = new Operation_Multi();
                    break;
                case "/":
                    operation = new Operation_Div();
                    break;
            }
            return operation;
        }
    }
}

简单工厂模式的优点
1.简单工厂模式解决了客户端直接依赖于具体对象的问题,客户端可以消除直接创建对象的责任,而仅仅是消费产品。简单工厂模式实现了对责任的分割。
2.简单工厂模式也起到了代码复用的作用,因为之前的实现(计算器的Demo)中,如果增加了一个算法之后,换了一个环境同样要在自己的类中实现该算法,有了简单工厂后,要实现该算法就会变得很简单,只需要调用工厂中的方法生产对应的对象。
简单工厂模式的缺点
1.工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都会受到影响。
2.系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,这样就会造成工厂逻辑过于复杂。
3.每增加一个产品,相应的也要增加一个子工厂,加大了额外的开发量。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值