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

简单工厂模式

  1. 通过封装、继承、多态把程序的耦合度降低。用设计模式使得程序更加的灵活,容易修改,并且易于复用。
  2. 让业务逻辑和界面逻辑分开,让它们耦合度降低,这样才容易维护和扩展。
csharp 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

//要求输入两个数和运算符号,得到结果

namespace Calculator
{
    class Program
    {
        static void Main(string[] args)
        {
            
            Console.WriteLine("请输入一个数字");
            string strNum1 = Console.ReadLine();
            Console.WriteLine("请在输入一个数字");
            string strNum2 = Console.ReadLine();
            Console.WriteLine("请输入一个运算符");
            string strOp = Console.ReadLine();

            Operation oper = OperationFactory.CreateOperation(strOp);

            double num1 = double.Parse(strNum1);
            double num2 = double.Parse(strNum2);
            double result = oper.GetResult(num1, num2);

            Console.WriteLine($"{num1}{strOp}{num2}={result}");

        }
    }

    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 num1,double num2)
        {
            return 0;
        }
    }

    class CalculateAdd : Operation
    {
        public override double GetResult(double num1, double num2)
        {
            return num1 + num2;
        }
    }
    class CalculateSub : Operation
    {
        public override double GetResult(double num1, double num2)
        {
            return num1 - num2;
        }
    }
    class CalculateMulti : Operation
    {
        public override double GetResult(double num1, double num2)
        {
            return num1 * num2;
        }
    }
    class CalculateDiv : Operation
    {
        public override double GetResult(double num1, double num2)
        {
            try
            {
                return num1 / num2;
            }
            catch (Exception ex)
            {
                throw ex;
            }       
        }
    }

    public class OperationFactory
    {
        static Operation oper = null;
        public static Operation CreateOperation(string op)
        {
            switch (op)
            {
                case "+":
                    oper = new CalculateAdd();
                    break;
                case "-":
                    oper = new CalculateSub();
                    break;
                case "*":
                    oper = new CalculateMulti();
                    break;
                case "/":
                    oper = new CalculateDiv();
                    break;
                default:
                    break;
            }
            return oper;
        }
    }

}
相关推荐
cjp5608 小时前
012.UG二次开发,UG管道服务器与WPF管道通讯,传输JSON数据
c#
jiushidt10 小时前
ArcGIS Pro Add‑in 打包流程详解
arcgis·c#·.net·arcgispro
善良勤劳勇敢而又聪明的老杨11 小时前
【AI编程系列】MCP 常用设计模式解读
设计模式·ai编程
geovindu13 小时前
java: Strategy Pattern
java·开发语言·后端·设计模式·策略模式·行为模式
码匠许师傅1 天前
【设计模式精讲】29.行为型模式总结与对比(Behavioral Patterns Summary)
c++·设计模式·uml
geovindu1 天前
CSharp: Observer Pattern
开发语言·后端·观察者模式·设计模式·c#·.netcore·行为模式
软件黑马王子1 天前
20.Resources资源加载:基本实现
开发语言·前端框架·c#
张人玉1 天前
基于 C# / .NET 8 + Windows Forms + SQLite 的桌面银行业务演示系统——华夏示范银行管理系统
windows·sqlite·c#·.net
1314lay_10071 天前
C#调用Sql Server存储过程,并且使用传入表结构
数据库·经验分享·笔记·sqlserver·c#
慧都小妮子1 天前
.NET 报表控件选型对比:Stimulsoft 与 FastReport 怎么选
c#·.net·报表开发·数据可视化·报表控件·报表引擎选型