• 设计模式:工厂方法


    工厂方法模式(Factory Method):定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。

    namespace SimleFactory
    {
        public class Operation
        {
            public double NumberA { get; set; }
            public double NumberB { get; set; }
            public virtual double GetResult()
            {
                double result = 0;
                return result;
            }
        }
        public class OperationAdd:Operation
        {
            public override double GetResult()
            {
                return NumberA + NumberB;
            }
        }
        public class OperationSub : Operation
        {
            public override double GetResult()
            {
                return NumberA - NumberB;
            }
        }
        public class OperationMul : Operation
        {
            public override double GetResult()
            {
                return NumberA * NumberB;
            }
        }
        public class OperationDiv : Operation
        {
            public override double GetResult()
            {
                if (NumberB == 0)
                    throw new Exception("除数不能为0.");
                return NumberA / 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 OperationAdd();
                        break;
                    case "*":
                        oper = new OperationAdd();
                        break;
                    case "/":
                        oper = new OperationAdd();
                        break;
                }
                return oper;
            }
        }
        /// <summary>
        /// 工厂方法
        /// </summary>
        public interface IFactory
        {
            Operation CreateOperation();
        }
        public class AddFactory : IFactory
        {
            public Operation CreateOperation()
            {
                return new OperationAdd();
            }
        }
        public class SubFactory:IFactory
        {
            public Operation CreateOperation()
            {
                return new OperationSub();
            }
        }
        public class MulFactory:IFactory
        {
            public Operation CreateOperation()
            {
                return new OperationMul();
            }
        }
        public class DivFactory:IFactory
        {
            public Operation CreateOperation()
            {
                return new OperationDiv();
            }
        }
    }
    View Code

    测试代码:

                IFactory factory = new AddFactory();
                Operation oper= factory.CreateOperation();
                oper.NumberA = 1;
                oper.NumberB = 2;
                double result = oper.GetResult();
                Assert.AreEqual(result, 3);
    View Code
  • 相关阅读:
    让IT工作者过劳的13个坏习惯zz
    WPF Radio button的解决方案
    程序退出的各种方法,如何关闭多线程。
    文本框输入自动切换输入法问题
    在外部js文件中读取带母版页的子页当中控件的值
    Showwindow/FindWindow/PostMessage 转
    vb读取字节中的某一位
    C# 禁止windows程序重复运行的两种基本方法
    C# DllImport的用法(转)
    sqlserver存储过程中sql语句连接及datetime字段的处理
  • 原文地址:https://www.cnblogs.com/uptothesky/p/5254346.html
Copyright © 2020-2023  润新知