C# 设计模式:简单工厂模式

时间:2021-09-07
本文章向大家介绍C# 设计模式:简单工厂模式,主要包括C# 设计模式:简单工厂模式使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

*参考:《大话设计模式》
在现实生活中工厂是负责生产产品的,同样在设计模式中,简单工厂模式我们也可以理解为负责生产对象的一个类, 我们平常编程中,当使用"new"关键字创建一个对象时,此时该类就依赖与这个对象,也就是他们之间的耦合度高,当需求变化时,我们就不得不去修改此类的源码,此时我们可以运用面向对象(OO)的很重要的原则去解决这一的问题,该原则就是——封装改变,既然要封装改变,自然也就要找到改变的代码,然后把改变的代码用类来封装,这样的一种思路也就是我们简单工厂模式的实现方式了。下面通过一个现实生活中的例子来引出简单工厂模式。

简单工厂模式

到底要实例化谁,将来会不会增加实例化的对象,比如增加开根运算,这是很容易变化的地方,应考虑用一个单独的类来来做这个创造实例的过程,这就是工厂

namespace OperationFactory
{
    // 工厂类
    public class OperationFactory
    {
        public static Operation CreateOperation(string operate)
        {
            Operation operation = new Operation();
            switch (operate)
            {
                case "+":
                    operation = new OperationAdd();
                    break;
                case "-":
                    operation = new OperationSub();
                    break;
                case "*":
                    operation = new OperationMul();
                    break;
                case "/":
                    operation = new OperationDiv();
                    break;
            }
            return operation;
        }
    }
}
namespace OperationFactory
{
    // 运算类
    public class Operation
    {
        public double NumberA { get; set; }
        public double NumberB { get; set; }

        public virtual double GetResult()
        {
            double result = 0;
            return result;
        }
    }
}

加减乘除类

namespace OperationFactory
{
    public class OperationAdd : Operation
    {
        public override double GetResult()
        {
            double result = 0;
            result = NumberA + NumberB;
            return result;
        }
    }
}
namespace OperationFactory
{
    public class OperationSub : Operation
    {
        public override double GetResult()
        {
            double result = 0;
            result = NumberA - NumberB;
            return result;
        }
    }
}
namespace OperationFactory
{
    public class OperationMul : Operation
    {
        public override double GetResult()
        {
            double result = 0;
            result = NumberA * NumberB;
            return result;
        }
    }
}
namespace OperationFactory
{
    public class OperationDiv : Operation
    {
        public override double GetResult()
        {
            double result = 0;
            result = NumberA / NumberB;
            return result;
        }
    }
}
using System;

namespace OperationFactory
{
    // 客户端
    class Program
    {
        static void Main(string[] args)
        {
            Operation ope = OperationFactory.CreateOperation("+");
            ope.NumberA = 2;
            ope.NumberB = 4;
            double result = ope.GetResult();
            Console.WriteLine(result);
        }
    }
}

原文地址:https://www.cnblogs.com/Hyacinth-Zu/p/15237869.html