设计模式:简单工厂(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种设计模式之一.但它在实际的编程中经常被用到,而且思想也非常简单,可以说是工厂方法模式的一个引导,所以我想 ...
随机推荐
- mysql的统计函数
一:统计函数 MySQL提供5个统计函数来对对数据进行统计.分别是实现对记录进行统计数,计算和,计算平均数,计算最大值和计算最小值. 1. 统计数据记录条数 可以有两种方式: COUNT(*)使用方式 ...
- 算法教程(1)zz
Introduction Many TopCoders seem to be mortally afraid of geometry problems. I think it's safe to sa ...
- BZOJ3012 : [Usaco2012 Dec]First!
建立Trie,那么成为答案的串必须满足其终止节点到根路径上没有其它点. 对于Trie上每个节点维护一个bitset,表示哪些字符必须在哪些字符之前. 每到达一个可能成为答案的终止节点,对图进行拓扑排序 ...
- BZOJ3837 : [Pa2013]Filary
当m取2时,k至少为$\frac{n}{2}$ 所以在最优解中每个数被选中的概率至少为$\frac{1}{2}$ 每次随机选取一个位置i,计算出其它数与$a_i$的差值,将差值分解质因数 所有质因数中 ...
- HTML6 展望
HTML5 概述 HTML5 是 HTML 语言最受欢迎的版本之一,它支持音频和视频.离线存储.移动端.和标签属性等等.还提供了<article>, <section>, &l ...
- 【wikioi】1907 方格取数3(最大流+最大权闭合子图)
http://www.wikioi.com/problem/1907/ 这题我一开始想到的是状压,看到n<=30果断放弃. 然后也想到了黑白染色,然后脑残了,没想到怎么连边. 很简单的一题 黑白 ...
- asp.net 微信企业号办公系统-流程设计--流程步骤设置-数据设置
数据设置是控制在流程处理过程中,当前步骤的数据显示与编辑状态,控制当前步骤哪些字段为只读,隐藏或可编辑.需要配合表单设计器使用.
- Oracle--10(ROW_NUMBER() OVER)
一.定义 语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN) 简单的说row_number()从1开始,为每一条分组记录返回一个数字,这 ...
- [转]IE11下Forms身份认证无法保存Cookie的问题
本文转自:http://www.cnblogs.com/jaxu/p/3698377.html ASP.NET中使用Forms身份认证常见的做法如下: 1. 网站根目录下的Web.config添加au ...
- JSValidation客户端验证框架
下载 引入文件 <script src="/Example4/js/validation-framework.js"></script> <!DOCT ...