简单工厂模式 -- 大话设计模式

在今天,读书有时是件“麻烦”事。它需要你付出时间,付出精力,还要付出一份心境。--仅以《大话设计模式》来祭奠那逝去的……

简单工厂的作用是实例化对象,不需要客户了解这个对象属于哪个具体子类。简单工厂实例化的类具有相同的接口或者基类,在子类相对固定或者不需要扩展的时候,可以使用简单工厂。如数据库生产工厂就可以使用简单工厂来实现。

 1.简单的计算器实现

  输入两个数和运算符,实现两数相加或者两数相减。

  首先我们定义一个运算类,包含两个属性:数字A和数字B,还有一个获取结果的虚方法GetResult方便获取运算结果

    /// <summary>
    /// 运算类
    /// </summary>
    public class Operation
    {
        public double NumberA { get; set; }

        public double NumberB { get; set; }

        public virtual double GetResult()
        {
            var result = 0;

            return result;
        }
    }

   然后我们编写加法运算和减法运算类,让其集成运算类,重写GetResult类实现不同的运算结果(如果我们以后要增加其他运算方法,只需要新增一个继承Operation的运算类,而无需变动已经写好的加法和减法运算类)

    /// <summary>
    /// 加法运算
    /// </summary>
    public class OperationAdd : Operation
    {
        public override double GetResult()
        {
            return this.NumberA + this.NumberB;
        }
    }

    /// <summary>
    /// 减法运算
    /// </summary>
    public class OperationSub : Operation
    {
        public override double GetResult()
        {
            return this.NumberA - this.NumberB;
        }
    }

   定义一个简单运算工厂,到底要实例化谁,将来是否要新增实例化对象,比如除法、乘法等。这些都交给简单运算工厂来实现,以后若有变化要动也只需要改动工厂这块就好了,而不是整个项目去搜索一遍实例化运算类的代码

    /// <summary>
    /// 简单运算工厂
    /// </summary>
    public class OperationFactory
    {
        public static Operation CreateOperation(string operate)
        {
            Operation oper = null;

            switch (operate)
            {
                case "+":
                    oper = new OperationAdd();
                    break;
                case "-":
                    oper = new OperationSub();
                    break;
            }

            return oper;
        }
    }

 

posted @ 2015-10-27 15:09  荒古禁地  阅读(218)  评论(0编辑  收藏  举报