设计模式一——简单工厂模式



一、简单工厂(创建型模式)(不是GOF二十三种设计模式之一):由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(产品类继承于父类或者接口)的实例。

二、类图:

三、代码

    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)
                throw new Exception("0不能作为除数");
            result = NumberA / NumberB;
            return result;
        }
    }

//Operation Factory

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

//Main

        /// <summary>
        /// 计算器的代码,实现方法的封装,继承
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            Operation oper;
            oper = OperationFactory.createOperate("+");
            oper.NumberA = 10;
            oper.NumberB = 5;
            double result = oper.GetResult();
            Console.WriteLine(result);
            Console.ReadLine();
        }

四、优缺点

优点:

不需要关心如何创建具体的产品,只需要提供产品的名称作为参数传给工厂,就可以实现想要的产品功能,构造容易,逻辑简单

缺点:

  1. 调用方法传递参数时,需要switch判断具体实现哪个方法

  2. 一个工厂类集合了所有类的实例创建逻辑,违反了高内聚的责任分配原则

引用:http://www.cnblogs.com/ytaozhao/p/3387540.html

<<大话设计模式>>(程杰)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值