C#基础之简单工厂模式计算器

类库:.dll文件,使用类库来封装常用的功能,无法单独运行。

abstact class Calculator类{字段Num1,字段Num2,abstract int GetResult()方法}

Add类:Calculator类{override int GetResult()返回Num1+Num2}

Sub类{...}

Multi{...}

divi {...}

工厂类:-------------------------------------------------------------------------------

public class CaculatorFactory
    {
       public static Calc CreateCalc(string oper)
       {
           Calc calc = null;
           switch (oper)
           {
               case "+":
                  calc=new Add();
                   break;
               case "-":
                  calc=new Sub();
                   break;
               case "*":
                   calc=new Multi();
                   break;
               case "/":
                   calc=new Divi();
                   break;
           }
           return calc;
       }
    }

Main()

{

  Calculator calc = CalculatorFactory.CreateCalc(oper);

  calc.Num1=  ;

  calc.Num2=  ;

  int result = calc.GetResult();

}

完成

  1 偷的代码-----------------------------------------------------------------------
  2 Add.cs
  3 namespace ProOperation
  4 {
  5     public class Add : Operation
  6     {
  7         public Add(int n1, int n2)
  8             : base(n1, n2)
  9         { }
 10         public override int GetResult()
 11         {
 12             return this.NumberOne + this.NumberTwo;
 13         }
 14     }
 15 }
 16
 17 Cheng.cs
 18 namespace ProOperation
 19 {
 20     public  class Cheng:Operation
 21     {
 22         public Cheng(int n1, int n2)
 23             : base(n1, n2)
 24         { }
 25
 26         public override int GetResult()
 27         {
 28             return this.NumberOne * this.NumberTwo;
 29         }
 30     }
 31 }
 32
 33 Chu.cs
 34 namespace ProOperation
 35 {
 36     public class Chu:Operation
 37     {
 38         public Chu(int n1, int n2)
 39             : base(n1, n2)
 40         { }
 41
 42         public override int GetResult()
 43         {
 44             return this.NumberOne / this.NumberTwo;
 45         }
 46     }
 47 }
 48
 49 Sub.cs
 50 namespace ProOperation
 51 {
 52     public class Sub : Operation
 53     {
 54         public Sub(int n1, int n2):base(n1,n2)
 55         { }
 56
 57         public override int GetResult()
 58         {
 59             return this.NumberOne - this.NumberTwo;
 60         }
 61     }
 62 }
 63
 64 Operation.cs
 65 namespace ProOperation
 66 {
 67     public abstract class Operation
 68     {
 69         public int NumberOne { get; set; }
 70         public int NumberTwo { get; set; }
 71         public Operation(int n1, int n2)
 72         {
 73             this.NumberOne = n1;
 74             this.NumberTwo = n2;
 75         }
 76         public abstract int GetResult();
 77     }
 78 }
 79
 80 namespace Calculator
 81 {
 82     class Program
 83     {
 84         static void Main(string[] args)
 85         {
 86             Console.WriteLine("请输入第一个数字");
 87             int n1 = Convert.ToInt32(Console.ReadLine());
 88             Console.WriteLine("请输入第二个数字");
 89             int n2 = Convert.ToInt32(Console.ReadLine());
 90             Console.WriteLine("请输入操作符");
 91             string oper = Console.ReadLine();
 92
 93             //根据用户输入的操作符 返回算符的父类
 94
 95             Operation operation = GetOperation(oper, n1, n2);
 96             if (operation != null)
 97             {
 98                 int result = operation.GetResult();
 99                 Console.WriteLine("{0}{1}{2}={3}", n1, oper, n2, result);
100             }
101             else
102             {
103                 Console.WriteLine("没有你想要的运算符");
104             }
105             Console.ReadKey();
106         }
107
108         static Operation GetOperation(string oper, int n1, int n2)
109         {
110             Operation operation = null;
111             switch (oper)
112             {
113                 case "+":
114                     operation = new Add(n1, n2);
115                     break;
116                 case "-":
117                     operation = new Sub(n1, n2);
118                     break;
119                 case "*":
120                     operation = new Cheng(n1, n2);
121                     break;
122                 case "/":
123                     operation = new Chu(n1, n2);
124                     break;
125             }
126             return operation;
127         }
128     }
129 }
时间: 2024-08-12 19:13:16

C#基础之简单工厂模式计算器的相关文章

C#基础之简单工厂模式和单例模式

设计模式(Design pattern):指的是一种大多数人反复使用的代码设计经验. 作用:代码复用.易读性.保证代码可靠性. 一.简单工厂模式 用法:创建一个工厂类(命名习惯以Factiory结尾),一个静态的带参数(根据不同的参数返回不同的子类对象)的父类类型的方法. public class FunctionFactory { public static FatherClass Function(string str) { FatherClass fc = null; ... return

[Python设计模式] 第1章 计算器——简单工厂模式

写在前面的话 """ 读书的时候上过<设计模式>这一门课,当时使用的教材是程杰老师的<大话设计模式>,使用的语言是C#,学过课程之后初期深感面向对象思想的伟大,但是很少应用到实际开发中.后来我接触了Python,现在工作中用到最多的也是Python,或许是因为Python的便利性,我写的很多脚本/程序都还是面向过程编程,缺少面向对象的思想在里边.因此,我打算重读程杰老师的<大话设计模式>并用Python进行实践. ""&

简单工厂模式 - 怎样实现高逼格的计算器(C#)

1. 面向过程的计算器 static void Main(string[] args) { //面向过程的计算器 try { Console.WriteLine("请输入数字A: "); string strNumA = Console.ReadLine(); Console.WriteLine("请选择运算符号(+.-.*./): "); string strOperate = Console.ReadLine(); Console.WriteLine("

简单工厂模式——MFC计算器实现

设计模式是重构的目标,它在代码复用和扩展方面有着非常重要的作用.学习面向对象,重构和设计模式的重要性自然不言而喻.那么,学习设计模式需要与软件设计,软件编码相结合起来,以例子为驱动.本文将通过MFC计算器的实现来学习简单工厂模式. 无论怎么样,首先应该抽象出MFC计算器的实体类.通过查找名词,动名词等等,准确找到实体类是第一步. 显然,它的核心实体类是Operator运算类.细想之,它的实现恰好与简单工厂密切相关. 简单工厂模式解释:  简单工厂模式(Simple Factory Pattern

学习大话设计模式01_简单工厂模式(简易计算器)

1 /** 2 * 面向对象(运算类) 3 * 简易计算器 4 * @author Monica 5 * 6 */ 7 public class Operation { 8 private double numberA = 0; 9 private double numberB = 0; 10 11 //虚函数 12 public double GetResult() { 13 double result = 0; 14 return result; 15 } 16 17 public doub

【幻化万千戏红尘】qianfengDay10-java基础学习:成员内部类、静态内部类、局部和匿名内部类,设计模式之简单工厂模式

课程回顾: 接口:1.属性:public\static\final2.方法:public\abstract 多态:1.静态化(编译时)多态重载2.动态化(运行时)多态重写对象转型 1.向上转型 2.向下转型 今日内容:内部类:定义在类的内部的类1.成员内部类格式:[修饰符] class 类名 { }内部不能有静态的属性和方法,可以访问外部类的属性,也可以调用外部类的方法 在静态方法中的使用格式:外部类 外对象=new 外部类();成员内部类 对象名=外对象.new 成员内部类(); 2.静态内部

(二)设计模式之PHP项目应用(简单工厂模式:计算器)

1 简单工厂模式简介 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例. 2 模式组成 1)工厂(Creator)角色 简单工厂模式的核心,它负责实现创建所有实例的内部逻辑.工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象. 2)抽象产品(Product)角色 简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口. 3)具体产品(Concrete Product)角色 是简单工厂模式的创建目标,所

简单工厂模式_计算器实现

优点: 1.不用自己再去new对象,工厂会根据给的标识,自动替你new出一个你想要的实现类对象. 2.一定程度上在加减乘除之间实现了解耦合.提高了代码的复用性和扩展性. 一.整体思想图: 二.代码实现 2.1 父类 package com.design.bean; /** * 简单工厂模式--父类(抽取固定模块) * @author phoebe * */ public class CaculateBean { private double a; private double b; privat

工厂模式——简单工厂模式

工厂模式分三类:简单工厂模式.工厂方法模式.抽象工厂模式. 首先介绍比较简单一种工厂模式——简单工厂模式. 我们以计算器作为一个例子来说明工厂模式到底是什么.作为一个几年前大一从C语言起步的初级程序员,到现在写代码的思维还是停留在结构化编程,虽然Java学了有几年了,总是说面向对象面向对象.但是让实现一个计算器的程序,估计大部分人都会以C语言式的结构化编程来写,几个if语句或者一个switch来搞定.我也同样不例外,为了提高自己的编程水平,所以一点点开始学设计模式.其实在很多开源代码里也有很多经