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

文章目录

面向对象------如:活字印刷术 封装、继承、多态

通过面向对象的三大特性:封装、继承、多态 降低程序耦合度。使得程序易维护、易扩展、易复用

松耦合------业务逻辑与界面逻辑分离------简单工厂模式

例如构建一个计算器功能:

1.根据计算方式,只编译该类型与方法,而不是编译所有,易于维护。例如:使用加法运算只编译加法运算而不是所有运算。

2.添加其他运算方式。例如添加次方运算,不用给工程师整个代码,发生其他计算方式代码误操作、更改、泄密等其他情况。

以下分别举例紧耦合案列、松耦合案例:

紧耦合举例

所有方法汇总在一起,导致计算时需要全部加载

csharp 复制代码
       public void TryCal()
       {
            try
            {
                //输入数字A:
                string strNumberA = numberA.Text;
                //请选择运算符号(+、-、*、/)
                string strOperate = numberO.Text;
                //请输入数字B:
                string strNumberB = numberB.Text;
                numberR.Text = operation.GetResult(Convert.ToDouble(strNumberA), Convert.ToDouble(strNumberB), strOperate).ToString();
            }
            catch (Exception er)
            {
                LBError.Content = er.Message.ToString();
            }

        }
        public class operation
        {
            public static double GetResult(double A, double B, string operatesign)
            {
                double result = 0d;
                switch (operatesign)
                {
                    case "+":
                        result = A + B;
                        break;
                    case "-":
                        result = A - B;
                        break;
                    case "*":
                        result = A * B;
                        break;
                    case "/":
                        result = A / B;
                        break;
                    default:
                        break;
                }
                return result;
            }
        }

        private void numberR_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key==Key.Enter)
            {
                TryCal();
            }
        }

松耦合举例------简单工厂模式

利用简单工厂模式,根据条件实例化对象,避免增加不必要的实例化对象。

csharp 复制代码
       public void TryCall_Factory()
        {
            try
            {
               operationL opel = OperationFactory.createOperate(numberO.Text);
                opel.NumberA = Convert.ToDouble(numberA.Text);
                opel.NumberB = Convert.ToDouble(numberB.Text);
                numberR.Text = opel.Getresult().ToString();
            }
            catch (Exception er)
            {
                LBError.Content = er.Message.ToString();

            }
        }
        public class OperationFactory
        {
            public static operationL createOperate(string operatestr)
            {
                operationL operation = null;
                switch (operatestr)
                {
                    case "+":
                        operation = new OperationAdd();
                        break;
                    case "-":
                        operation = new OperationSub();
                        break;
                    case "*":
                        operation = new OperationMul();
                        break;
                    case "/":
                        operation = new OperationDiv();
                        break;
                }
                return operation;
            }
        }
        public class operationL
        {
            private Double _numberA;

            public Double NumberA
            {
                get { return _numberA; }
                set { _numberA = value; }
            }

            private Double _numberB;

            public Double NumberB
            {
                get { return _numberB; }
                set { _numberB = value; }
            }
            public virtual Double Getresult()
            {
                double result = 0d;
                return result;
            }
        }
        public class OperationAdd:operationL
        {
            public override double Getresult()
            {
                double result = 0d;
                result = NumberA + NumberB;
                return result;
            }
        }
        public class OperationSub : operationL
        {
            public override double Getresult()
            {
                double result = 0d;
                result = NumberA - NumberB;
                return result;
            }
        }
        public class OperationMul : operationL
        {
            public override double Getresult()
            {
                double result = 0d;
                result = NumberA* NumberB;
                return result;
            }
        }
        public class OperationDiv : operationL
        {
            public override double Getresult()
            {
                double result = 0d;
                if (NumberB == 0)
                    throw new Exception("除数不能为0");
                result = NumberA /NumberB;
                return result;
            }
        }
相关推荐
long31616 分钟前
构建者设计模式 Builder
java·后端·学习·设计模式
咕白m6251 小时前
通过 C# 高效提取 PDF 文本的完整指南
后端·c#
一乐小哥3 小时前
从 JDK 到 Spring,单例模式在源码中的实战用法
后端·设计模式
hqwest4 小时前
C#WPF实战出真汁08--【消费开单】--餐桌面板展示
c#·wpf·ui设计·wpf界面设计
orangapple4 小时前
WPF 打印报告图片大小的自适应(含完整示例与详解)
c#·wpf
付春员6 小时前
23种设计模式
设计模式
Zyy~18 小时前
《设计模式》工厂方法模式
设计模式·工厂方法模式
★YUI★19 小时前
学习游戏制作记录(玩家掉落系统,删除物品功能和独特物品)8.17
java·学习·游戏·unity·c#
谷宇.20 小时前
【Unity3D实例-功能-拔枪】角色拔枪(二)分割上身和下身
游戏·unity·c#·游戏程序·unity3d·游戏开发·游戏编程
LZQqqqqo20 小时前
C# 中 ArrayList动态数组、List<T>列表与 Dictionary<T Key, T Value>字典的深度对比
windows·c#·list