zoukankan      html  css  js  c++  java
  • 代码无错就是优? 简单工厂模式

    1.1 面试受挫

    1.2 初学者代码毛病

    1.3 代码规范

    1.4 面向对象编程

    1.5 活字印刷 面向对象

    喝酒唱歌+人生真爽,对酒当歌+人生真爽,对酒当歌+人生几何,

    可维护,可复用,可扩展,灵活性好,

    1.6 面向对象好处

    通过封装,继承,多态把程序的耦合度降低,

    设计模式使程序更加灵活,容易修改且易于复用,

    1.7 复制VS服用

    计算与显示分开,

    1.8 业务的封装

    1.9 紧耦合VS松耦合

    1.10 简单工厂模式

    运算类:

    namespace OperationLibrary
    {
        /// <summary>
        /// 运算类
        /// </summary>
        public class Operation
        {
            private double _numberA = 0;
            private double _numberB = 0;
    
            /// <summary>
            /// 数字A
            /// </summary>
            public double NumberA
            {
                get
                {
                    return _numberA;
                }
                set
                {
                    _numberA = value;
                }
            }
    
            /// <summary>
            /// 数字B
            /// </summary>
            public double NumberB
            {
                get
                {
                    return _numberB;
                }
                set
                {
                    _numberB = value;
                }
            }
    
            /// <summary>
            /// 得到运算结果
            /// </summary>
            /// <returns></returns>
            public virtual double GetResult()
            {
                double result = 0;
                return result;
            }
    
            /// <summary>
            /// 检查输入字符串是否准确
            /// </summary>
            /// <param name="currentNumber"></param>
            /// <param name="inputString"></param>
            /// <returns></returns>
            public static string checkNumberInput(string currentNumber, string inputString)
            {
                string result = "";
                if (inputString == ".")
                {
                    if (currentNumber.IndexOf(".") < 0)
                    {
                        if (currentNumber.Length == 0)
                            result = "0" + inputString;
                        else
                            result = currentNumber + inputString;
                    }
                }
                else if (currentNumber == "0")
                {
                    result = inputString;
                }
                else
                {
                    result = currentNumber + inputString;
                }
                return result;
            }
        }
    
        /// <summary>
        /// 加法类
        /// </summary>
        class OperationAdd : Operation
        {
            public override double GetResult()
            {
                double result = 0;
                result = NumberA + NumberB;
                return result;
            }
        }
    
        /// <summary>
        /// 减法类
        /// </summary>
        class OperationSub : Operation
        {
            public override double GetResult()
            {
                double result = 0;
                result = NumberA - NumberB;
                return result;
            }
        }
    
        /// <summary>
        /// 乘法类
        /// </summary>
        class OperationMul : Operation
        {
            public override double GetResult()
            {
                double result = 0;
                result = NumberA * NumberB;
                return result;
            }
        }
    
        /// <summary>
        /// 除法类
        /// </summary>
        class OperationDiv : Operation
        {
            public override double GetResult()
            {
                double result = 0;
                if (NumberB == 0)
                    throw new Exception("除数不能为0。");
                result = NumberA / NumberB;
                return result;
            }
        }
    
        /// <summary>
        /// 平方类
        /// </summary>
        class OperationSqr : Operation
        {
            public override double GetResult()
            {
                double result = 0;
                result = NumberB * NumberB;
                return result;
            }
        }
    
        /// <summary>
        /// 平方根类
        /// </summary>
        class OperationSqrt : Operation
        {
            public override double GetResult()
            {
                double result = 0;
                if (NumberB < 0)
                    throw new Exception("负数不能开平方根。");
                result = Math.Sqrt(NumberB);
                return result;
            }
        }
    
        /// <summary>
        /// 相反数类
        /// </summary>
        class OperationReverse : Operation
        {
            public override double GetResult()
            {
                double result = 0;
                result = -NumberB;
                return result;
            }
        }
    
        /// <summary>
        /// 运算类工厂
        /// </summary>
        public class OperationFactory
        {
            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;
                        }
                    case "sqr":
                        {
                            oper = new OperationSqr();
                            break;
                        }
                    case "sqrt":
                        {
                            oper = new OperationSqrt();
                            break;
                        }
                    case "+/-":
                        {
                            oper = new OperationReverse();
                            break;
                        }
                }
                return oper;
            }
        }
    
    }
    View Code

    控制台:

    namespace 计算器控制台
    {
    
        class Program
        {
            static void Main(string[] args)
            {
                try
                {
                    Console.Write("请输入数字A:");
                    string strNumberA = Console.ReadLine();
                    Console.Write("请选择运算符号(+、-、*、/):");
                    string strOperate = Console.ReadLine();
                    Console.Write("请输入数字B:");
                    string strNumberB = Console.ReadLine();
                    string strResult = "";
    
                    Operation oper;
                    oper = OperationFactory.createOperate(strOperate);
                    oper.NumberA = Convert.ToDouble(strNumberA);
                    oper.NumberB = Convert.ToDouble(strNumberB);
                    strResult = oper.GetResult().ToString();
    
                    Console.WriteLine("结果是:" + strResult);
                    Console.ReadLine();
                }
                catch (Exception ex)
                {
                    Console.WriteLine("您的输入有错:" + ex.Message);
                }
            }
    
        }
    }
    View Code

    WinForm:

    namespace 计算器
    {
        public partial class Form1 : Form
        {
            bool bOperate = false;
            Operation oper;
    
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button0_Click(object sender, EventArgs e)
            {
                if (bOperate)
                {
                    txtShow.Text = "";
                    bOperate = false;
                }
                string number = ((Button)sender).Text;
                txtShow.Text = Operation.checkNumberInput(txtShow.Text, number);
            }
    
            private void buttonClear_Click(object sender, EventArgs e)
            {
                txtShow.Text = "";
            }
    
            private void buttonAdd_Click(object sender, EventArgs e)
            {
                if (txtShow.Text != "")
                {
                    oper = OperationFactory.createOperate(((Button)sender).Text);
                    oper.NumberA = Convert.ToDouble(txtShow.Text);
                    bOperate = true;
                }
            }
    
            private void buttonEqual_Click(object sender, EventArgs e)
            {
                if (txtShow.Text != "")
                {
                    if (((Button)sender).Text != "=")
                        oper = OperationFactory.createOperate(((Button)sender).Text);
                    oper.NumberB = Convert.ToDouble(txtShow.Text);
                    txtShow.Text = oper.GetResult().ToString();
                    bOperate = true;
                }
            }
    
        }
    }
    View Code

    1.11 UML类图

  • 相关阅读:
    设计模式(08):结构型模式(二) 桥接模式(Bridge)
    设计模式(07):结构型模式(一) 适配器模式(Adapter)
    设计模式(06):创建型模式(五) 原型模式(Prototype)
    node.js获取cookie
    排序算法[转]
    Observer(观察者)设计模式[转]
    c#发送Http请求
    win+R下的命令
    display:inline、block、inline-block的区别
    Redis安装
  • 原文地址:https://www.cnblogs.com/huangxuQaQ/p/11202910.html
Copyright © 2011-2022 走看看