此处示例为一个简易计算器工厂模式的实现.
创建类库,名为CalcLib,我把计算功能全部放在这个类库中.
首先,创建一个抽象的计算器算法父类,如下:

    /// <summary>
/// 计算器算法父类
/// </summary>
public abstract class Calculator
{
public Calculator()
{
} //给子类的参数
public Calculator(double n1, double n2)
{
this.Number1 = n1;
this.Number2 = n2;
} public double Number1 { get; set; }
public double Number2 { get; set; } /// <summary>
/// 抽象计算方法
/// </summary>
/// <returns>result</returns>
public abstract double Compute();
}

父类创建完毕后,我们在子类来实现具体的加减乘除
加法类:

    /// <summary>
/// 加法
/// </summary>
public class CalAdd:Calculator
{
public CalAdd(double n1, double n2)
:base(n1,n2)
{ } public override double Compute()
{
return Number1 + Number2;
}
}

减法类:

    /// <summary>
/// 减法
/// </summary>
public class CalSub:Calculator
{
public CalSub(double n1, double n2)
:base(n1,n2)
{ } public override double Compute()
{
return Number1 - Number2;
}
}

乘法类:

    /// <summary>
/// 乘法
/// </summary>
public class CalMul:Calculator
{
public CalMul(double n1, double n2)
:base(n1,n2)
{ } public override double Compute()
{
return Number1 * Number2;
}
}

除法类:

    /// <summary>
/// 除法
/// </summary>
public class CalDiv : Calculator
{
public CalDiv(double n1, double n2)
: base(n1, n2)
{ } public override double Compute()
{
return Number1 / Number2;
}
}

OK,需要的计算方法都创建完毕了,现在,我们来创建主程序,这里呢我创建一个控制台程序,名为MyCalculator,然后呢在Program类中添加一个静态的计算工厂方法。

        /// <summary>
/// 计算工厂
/// </summary>
/// <param name="n1">操作数1</param>
/// <param name="op">符号</param>
/// <param name="n2">操作数2</param>
/// <returns>计算结果</returns>
static Calculator Cal(double n1, string op, double n2)
{
Calculator cal = null;
switch (op)
{
case "+":
cal = new CalAdd(n1, n2);
break;
case "-":
cal = new CalSub(n1, n2);
break;
case "*":
cal = new CalMul(n1, n2);
break;
case "/":
cal = new CalDiv(n1, n2);
break;
default:
break;
}
return cal;
}

最后呢我在Main方法中添加了以下代码:

static void Main(string[] args)
{
Console.Title = "简易计算器";
Console.WindowWidth = 37;
Console.WindowHeight = 10;
Console.ForegroundColor = ConsoleColor.Green;
while (true)
{
try
{
Console.Clear();
Console.WriteLine("请输入操作数1:");
double n1 = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("请输入操作符:");
string op = Console.ReadLine();
Console.WriteLine("请输入操作数2:");
double n2 = Convert.ToDouble(Console.ReadLine());
Calculator cal = Cal(n1, op, n2);
if (cal != null)
Console.WriteLine("计算结果为:{0}", cal.Compute());
Console.WriteLine("再次按回车继续计算...");
Console.ReadLine();
}
catch { break; }
}
}

OK,一个简单的工厂模式实现就完成了,用工厂模式首先呢要有一个公用的抽象意义,然后再来使用,新功能无需更改任何代码,只需要新增一个类,基础父类,然后实现你要得功能就可以了,有点类似于浏览器和插件。

C#工厂模式代码实例的更多相关文章

  1. php设计模式之简单工厂模式代码实例

    <?php header("Content-type:text/html;charset=utf-8"); /** * 共同接口 */ interface db { func ...

  2. java 抽象工厂模式简单实例

    抽象工厂模式:提供一个创建一系列的相关的或者依赖的对象的接口,无需指定它们的具体实现类,具体的时间分别在子类工厂中产生. 类似于工厂模式:隔离了具体类的生产实现,使得替换具体的工厂实现类很容易.包含有 ...

  3. php工厂模式的实例

    * 单例模式:用于创建单一类型的唯一实例对象 * 工厂模式:用于创建多种类型的多个实例对象 //声明形状类 class Shape { //声明静态方法create,根据容器形状不同,创建不同图形类的 ...

  4. JavaScript工厂模式代码

    function createPerson(name,age,job){ var o=new Object(); o.name=name; o.age=age; o.job=job; o.sayNam ...

  5. C# 设计模式之工厂模式(一)

    写在前面,PS一句:笔记专用,轻拍勿喷,看的不爽绕路前行即可. 一.举栗说明 1.剧情:某银行财务有三位员工,分别为A.B.C三人,主要任务就是去银行取钱,如下: class EmloyeeA: { ...

  6. JAVA设计模式之工厂模式

    工厂模式概念: 实例化对象,用工厂方法代替new操作 工厂模式包括工厂方法模式和抽象工厂模式 抽象工厂模式是工厂方法模式的扩展 工厂模式的意图: 定义一个接口来创建对象,但是让子类来决定哪些类需要被实 ...

  7. JS中的工厂模式

    .一个栗子: var BicycleShop = function(){}; BicycleShop.prototype = { sellBicycle : function( model ){ va ...

  8. 学习:java设计模式—工厂模式

    一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类: 1)简单工厂模式(Simple Facto ...

  9. Java设计模式02:常用设计模式之工厂模式(创建型模式)

    一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的.  工厂模式在<Java与模式>中分为三类: 1)简单工厂模式(Simple Fact ...

随机推荐

  1. IIS7的安装详解

    IIS7安装流程规范 1,   IIS常用的功能模块介绍: 1)         静态内容:可发布静态 Web 文件格式,比如 HTML 页面和图像文件. 2)         默认文档:允许您配置当 ...

  2. 干货--微信公众平台客户端调试工具-初试WPF开发

    本工具可以由任意一个开发微信公众平台的开发者使用,虽然它本身使用WPF(C#)开发的,但是并不受你想调试的服务所用的语言的影响. 之前一直在做微信公众平台开发,客户端调试是必须做的事情,一直以来都是用 ...

  3. 树形dp入门

    poj2057 某公司的上下级关系是一颗树状结构,每个人不能与他的上司同时出现,每个人有一个值,求最大值. 这个题需要注意的是如果不保存状态会超时,这似乎也是大部分dp应该注意的事情啊 #includ ...

  4. C++程序设计教程学习(1)-第一部分 编程基础

    第一章 概述 C++到底难不难学?没有学不会的事情 1.1 程序设计语言 语言 编程语言 人和计算机交流的工具,群体扩大,人人间交流过程描述与信息表达的工具 机器语言,汇编语言,高级语言 1.2 C+ ...

  5. Sql Server 连接池及其用法

    其实我们一直在使用SqlServer的连接池.在连接字符串中,Pooling为是否启用连接池,默认值为true,表示启用. 与连接池相关的两个重要参数是 Min Pool Size和 Max Pool ...

  6. uva 10609 - Fractal

    题目大意:给出A,B两个点的坐标,以及T,每次找到A.B的四等分点C,D,然后以AB/2为边长,C,D为顶点,构建一个等边三角形,E为另外一个顶点,然后再对C,E:E,D做同样的操作,直到构建的等边三 ...

  7. GO 输出字符数同时输出这个字符串的字节数

    package main import ( "fmt" "unicode/utf8" ) func main(){ var str string str=&qu ...

  8. Feedly订阅Blog部落格RSS网摘 - Blog透视镜

    网络信息爆炸的时代,如何更有效率地阅读文章,订阅RSS网摘,可以快速地浏览文章标题,当对某些文章有兴趣时,才点下连结连到原网站,阅读更详细的文章,Feedly Reader阅读器除了提供在线版订阅RS ...

  9. Servlet 中的out.print()与out.writer()的区别

    PrintWriter out = response.getWriter(); out.print(obj)其源码如下: public void print(Object obj) { write(S ...

  10. Android扩展 - 拍照篇(Camera)

    1.调用系统摄像头 1.声明常量和变量 2.按钮点击事件,打开系统摄像头 3.重写onActivityResult事件接收拍照返回 4.生成文件名返回路径 5.保存图片 private static  ...