日期:2014-05-16  浏览次数:20831 次

C#简单工厂模式

    刚刚开始设计模式,有了视频的基础,写代码相对容易一些,大话设计的第一章,首先就是代码规范,不论是以前学习VB还是准备考试的C++,到现在的C#,还有以后的Java等等,代码规范都是很重要的,所以从现在养成一个好习惯,规范自己的代码,培养专业素质。

    跟着大鸟和小菜一步一步学习,学习了第一个模式——简单工厂模式

    我们知道,简单工厂模式是类的创建模式,根据提供给它的数据返回几个可能类中的一个类的实例。

    优点:工程类中包含了必要地逻辑判断,根据客户端的选择条件动态实例化相关的类,对客户端来说,去除了与具体产品的依赖。


如下例子,是一个关于加减乘除运算的简单工厂模式。结构图如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 简单工厂模式算法
{
    class Program
    {
        //客户端代码
        static void Main(string[] args)
        {
            Operation oper;
            oper = OperationFactory.createOperate("+");//
            oper.NumberA = 1;
            oper.NumberB = 2;
            double result = oper.GetResult();
            Console.WriteLine("结果是:" + result);
        }
        //Operation运算类
        public class Operation  
        {
            private double _numberA = 0;
            private double _numberB = 0;
            public double NumberA
            {
                get { return _numberA; }
                set { _numberA = value; }
            }
            public double NumberB
            {
                get { return _numberB; }
                set { _numberB = value; }
            }
            public virtual double GetResult()
            {
                double result = 0;
                return result;
            }
        }
        class OperationAdd : Operation   //加法计算
        {
            public override double GetResult()
            {

                double result = 0;
                result = NumberA + NumberB;
                return result;
            }
        }
        class OperationSub : Operation    //减法计算
        {
            public override double GetResult()
            {
                double result = 0;
                result = NumberA - NumberB;
                return result;
            }
        }
        class OperationMul : Operation     //乘法计算
        {
            public override double GetResult()
            {
                double result = 0;
                result = NumberA * NumberB;
                return result;
            }
        }
        class OperationDiv : Operation    //除法计算
        {
            public override double GetResult()
            {
                double result = 0;
                if (NumberB == 0)               //考虑除法的除数为0时没有意义
                    throw new Exception("除法不能为0");
                result = NumberA / NumberB;
                return result;
            }
        }//简单运算工厂类
    
        public class OperationFacto