设计模式——简单工厂

慢慢的做记录,做最强大的自己

看了大话设计模式之后感触很深,发现自己还有很多学习的东西,设计软件并不是一两句代码把功能写完了就行,需要思考的内容有很多

代码来源参考大话设计模式这本书,这里在博客里记录一下,不可能每次都去翻书,但是在博客里面是非常好找的。

范例为一个简单工厂模式的计算器,首先先创建一个计算器运算所需要用到的数据模型,在java里面也叫bean,就是一个抽象的类,这里我们先创建一个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 results = 0;
            return results;
        }

        

    }

然后再创建加减乘除类,以便工厂进行调用

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;
            result = NumberA / NumberB;
            return result;
        }
    }

创建工厂类,实例化出合适的对象

 public static Operation CreateOperate(string operate)
        {
            Operation oper = null;
            switch (operate)
            {
                case "+":
                    oper = new OperationAdd();
                    break;
                case "-":
                    oper = new OperationSub();
                    break;
                case "*":
                    oper = new OperationMul();
                    break;
                case "/":
                    oper = new OperationDiv();
                    break;

            }
            return oper;
        }

 

通过多态,返回父类的方式,然后实现计算结果

static void Main(string[] args)
        {
            Operation oper;
            oper = OperationFactory.CreateOperate("+");
            oper.NumberA = 1;
            oper.NumberB = 2;
            double result = oper.GetResult();
            Console.WriteLine(result);
            Console.ReadLine();
        }

但是简单工厂模式会存在一个问题,后续如果新增方法的话那么还需要继续创建运算类,然后实例化对象,那么这样会增加代码结构的复杂度,当然还是有方法解决的,但是这里就只做简单工厂模式的介绍了,

三层模型基本上如果不是用了特别的方法那么基本都是基于简单工厂模式来处理方法的

Ps:这里补充一下

运行结果如下

 

posted @ 2018-09-04 21:13  饮雪俊枫  阅读(355)  评论(2编辑  收藏  举报