设计模式:简单工厂(Simple Factory)
定义:根据提供的数据或参数返回几种可能类中的一种。
示例:实现计算器功能,要求输入两个数和运算符号,得到结果。
结构图:

HTML:
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Simple Factory Demo</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="txtNumA" runat="server" Width="50px"></asp:TextBox>
<asp:DropDownList ID="ddlOperateType" runat="server">
<asp:ListItem Selected="True">+</asp:ListItem>
<asp:ListItem>-</asp:ListItem>
<asp:ListItem>*</asp:ListItem>
<asp:ListItem>/</asp:ListItem>
</asp:DropDownList>
<asp:TextBox ID="txtNumB" runat="server" Width="50px"></asp:TextBox>
<asp:Button ID="btnGetResult" runat="server" Text="=" OnClick="btnGetResult_Click" />
<asp:TextBox ID="txtResult" runat="server" Width="50px"></asp:TextBox>
<asp:Label ID="lblMessage" runat="server" ForeColor="Red"></asp:Label>
</div>
</form>
</body>
</html>
运算类:
/// <summary>
/// Operation 运算类
/// </summary>
public class Operation
{
public double NumberA { get; set; } public double NumberB { get; set; } public virtual double GetResult()
{
return ;
}
减加乘除类:
/// <summary>
/// 加法类
/// </summary>
public class OperateAdd : Operation
{
public override double GetResult()
{
double result = ;
result = NumberA + NumberB; return result;
} } /// <summary>
/// 减法类
/// </summary>
public class OperateSub : Operation
{
public override double GetResult()
{
double result = ;
result = NumberA - NumberB; return result;
} } /// <summary>
/// 乘法类
/// </summary>
public class OperateMul : Operation
{
public override double GetResult()
{
double result = ;
result = NumberA * NumberB; return result;
}
} /// <summary>
/// 除法类
/// </summary>
public class OperateDiv : Operation
{
public override double GetResult()
{
double result = ;
if (NumberB == )
throw new Exception("被除数不能为0");
result = NumberA / NumberB; return result;
}
}
简单工厂类:
/// <summary>
/// 简单运算工厂类
/// </summary>
public class OperationFactory
{
public static Operation CreateOperate(string operate)
{
Operation oper = null; switch (operate)
{
case "+":
oper = new OperateAdd();
break;
case "-":
oper = new OperateSub();
break;
case "*":
oper = new OperateMul();
break;
default:
oper = new OperateDiv();
break;
} return oper;
}
}
客户端调用:
protected void btnGetResult_Click(object sender, EventArgs e)
{
lblMessage.Text = ""; try
{
Operation opeation;
opeation = OperationFactory.CreateOperate(ddlOperateType.SelectedValue);
opeation.NumberA = Convert.ToDouble(txtNumA.Text);
opeation.NumberB = Convert.ToDouble(txtNumB.Text); double result = opeation.GetResult(); txtResult.Text = result.ToString();
}
catch (Exception ex)
{
lblMessage.Text = ex.Message;
}
}
设计模式:简单工厂(Simple Factory)的更多相关文章
- 简单工厂(Simple Factory),最合适的设计模式首秀.
简单工厂又称为静态工厂方法(static factory method)模式,简单工厂是由一个工厂来决定创建出哪一种个体的实现,在很多的讨论中,简单工厂做为工厂方法模式(Factory Method) ...
- 使用C# (.NET Core) 实现简单工厂(Simple Factory) 和工厂方法设计模式 (Factory Method Pattern)
本文源自深入浅出设计模式. 只不过我是使用C#/.NET Core实现的例子. 前言 当你看见new这个关键字的时候, 就应该想到它是具体的实现. 这就是一个具体的类, 为了更灵活, 我们应该使用的是 ...
- 设计模式~简单工厂模式(Factory)
简单工厂模式Simple Factory根据提供给它的数据,返回一个类的实例.通常它返回的类都有一个公共的父类(或者接口对象). 简单工厂的作用是实例化对象,而不需要客户了解这个对象属于哪个具体的子类 ...
- Golang设计模式—简单工厂模式(Simple Factory Pattern)
Golang设计模式--简单工厂模式 背景 假设我们在做一款小型翻译软件,软件可以将德语.英语.日语都翻译成目标中文,并显示在前端. 思路 我们会有三个具体的语言翻译结构体,或许以后还有更多,但现在分 ...
- java设计模式--简单工厂
java设计模式--简单工厂 简单工厂不是一个标准的设计模式,但是很常用需要掌握. 在java应用开发中,要"面向接口编程". 1.java中接口的概念: 在java中接口是一种特 ...
- Yii2设计模式——简单工厂模式
除了使用 new 操作符之外,还有更多的制造对象的方法.你将了解到实例化这个活动不应该总是公开进行,也会认识到初始化经常造成"耦合"问题. 应用举例 yii\db\mysql\Sc ...
- Yii2 设计模式——简单工厂模式
除了使用 new 操作符之外,还有更多的制造对象的方法.你将了解到实例化这个活动不应该总是公开进行,也会认识到初始化经常造成“耦合”问题. 应用举例 yii\db\mysql\Schema 中: // ...
- 3. 星际争霸之php设计模式--简单工厂模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- 深入浅出设计模式——简单工厂模式(Simple Factory)
介绍简单工厂模式不能说是一个设计模式,说它是一种编程习惯可能更恰当些.因为它至少不是Gof23种设计模式之一.但它在实际的编程中经常被用到,而且思想也非常简单,可以说是工厂方法模式的一个引导,所以我想 ...
随机推荐
- oracle 11g安装(转)
原文地址:http://www.2cto.com/database/201208/150620.html 一.Oracle 下载 注意Oracle分成两个文件,下载完后,将两个文件解压到同一目录下即可 ...
- 自己的一份Spring的xml配置文件
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...
- 【POJ】1556 The Doors(计算几何基础+spfa)
http://poj.org/problem?id=1556 首先路径的每条线段一定是端点之间的连线.证明?这是个坑...反正我是随便画了一下图然后就写了.. 然后re是什么节奏?我记得我开够了啊.. ...
- 平易近人、兼容并蓄——Spark SQL 1.3.0概览
自2013年3月面世以来,Spark SQL已经成为除Spark Core以外最大的Spark组件.除了接过Shark的接力棒,继续为Spark用户提供高性能的SQL on Hadoop解决方案之外, ...
- 更新AD对象属性值
1. 对于Set-ADUser不包含的对象属性,可以采用replace来操作 Set-ADUser -Identity 'UserA' -Replace @{userWorkstations = 'C ...
- 【转】jsonp详解
原文地址:http://www.cnblogs.com/yuzhongwusan/archive/2012/12/11/2812849.html json相信大家都用的多,jsonp我就一直没有机会用 ...
- 强、软、弱、虚引用,ReferenceQueue,WeakHashMap
强引用(Reference):所谓强引用就是普通引用.普通引用引用的对象,即使内存不足时,一般情况下也不会被回收. 软引用(weakReference):如果对象被且仅被软引用所引用时,内存不足时,会 ...
- A trip through the Graphics Pipeline 2011_03
At this point, we’ve sent draw calls down from our app all the way through various driver layers and ...
- 每天学点GDB 15
本节重点描述两个gdb集成测试环境 有没有办法在一边调试的时候,一边显示对应的源码呢?有没有一种工具能够将gdb集成到ide中呢,本文就试图回答这些问题. emacs gdb 在linux的世界里,e ...
- QuickStart OpenvirteX
参考:ubuntu14.04安装OpenVirteX 预准备: Java 7 sudo add-apt-repository ppa:webupd8team/java sudo apt-get upd ...