此处示例为一个简易计算器工厂模式的实现.
创建类库,名为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. Java:单例模式的七种写法(转载)

    第一种(懒汉,线程不安全): package Singleton; /** * @echo 2013-10-10 懒汉 线程不安全 */ public class Singleton1 { priva ...

  2. java开发的web下载大数据时的异常处理

    同事用java开发了一个系统,其中有一个功能是下载大约10万笔数据到Excel中.当上线后,很多用户反映下载数据量大的时候就不能成功,但有时可以,所以结论就是系统不稳定,这个问题拖了很久没有解决. 在 ...

  3. git开源项目协作

    开源项目协作 fork开源项目,即打开开源项目的github,然后点击fork按钮 pull request

  4. 忘记了SqlServer的SA密码怎么办

    转自 http://v-consult.be/2011/05/26/recover-sa-password-microsoft-sql-server-2008-r2/ 如果忘记了sa密码,并且wind ...

  5. [转载]C++ 堆与栈简单的介绍

    在C和C++中,有三种使用存储区的基本方式: [静态存储区(Static   Memory)] 在静态存储区中,连接器(linker)根据程序的需求为对象分配空间.全局变量.静态类成员以及函数中的静态 ...

  6. DHTML【2】--HTML

    通过题目,大家已经明确知道,从这一节开始介绍DHTML中的最基础的部分HTML,对于HTML等概念上一节已经做了概述,这一节不再赘余.在学习HTML之前,先告诉大家一个好消息,HTML不难,比C++. ...

  7. kafka安装及Kafka-PHP扩展的使用

    话说用了就要有点产出,要不然过段时间又忘了,所以在这里就记录一下试用Kafka的安装过程和php扩展的试用. 实话说,如果用于队列的话,跟PHP比较配的,还是Redis.用的顺手,呵呵,只是Redis ...

  8. ThinkPHP整合百度Ueditor

    文章来源:http://www.thinkphp.cn/code/267.html ThinkPHP整合百度Ueditor,基于黄永成老师的视频说明的申明:最好大家都能写绝对路径的都写好绝对路径比如: ...

  9. python 3.5 猜数字游戏

    #!/usr/bin/env python #encoding: utf-8 number = 88 for i in range(1,6): num = int(input('gusee numbe ...

  10. SQL语句优化技术分析

    一.操作符优化 1.IN 操作符 用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格.但是用IN的SQL性能总是比较低的,从Oracle执行的步骤来分析用IN的SQL与不用 ...