设计模式:简单工厂(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种设计模式之一.但它在实际的编程中经常被用到,而且思想也非常简单,可以说是工厂方法模式的一个引导,所以我想 ...
随机推荐
- Spring计划
团队: 郭志豪:http://www.cnblogs.com/gzh13692021053/ 杨子健:http://www.cnblogs.com/yzj666/ 刘森松:http://www.cnb ...
- MVC ViewEngineResult实际上是一种设计
概述 MVC中, IView代表一个视图,最后是要表现为HTML或者其他的HttpResponse的应答流的: IViewEngine提供了类似工厂的作用或者提供器的作用,以返回一个视图. OO的视觉 ...
- css构造块级元素
css 1. 宽高width:数值;height:数值;也可用百分比!长高的设置不会被后代继承2. 背景(1)背景颜色background-color:颜色值;元素的背景颜色默认为transparen ...
- 在visual studio中使用git版本系统(zz)
第一部分: 安装 git 开发工具 如果要使用 git 进行版本管理,其实使用 git 命令行工具就完全足够了,图形化工具(无论是 git extentions ,还是TortoiseGit),都只不 ...
- tiledmap2
1 1.1 将tiledmap 保存为xml格式 1.2 在unity当中设置摄像机为"Orthogonal", 1.3 拖拽tiledmap prefab从project视图到H ...
- Linux Mint 没有 language support 语言支持解决方案
打开新立得软件管理器在右边找到有关语言的安装后,language support就会出现
- windows 中配置 nodejs npm
npm安装模块的方式有两种:本地安装,全局安装. 这两者的区别在于,在用npm install xxx时加不加-g这个选项. 本地安装的路径在win中是当前cmd的路径.比如,我一打开cmd时,路径是 ...
- 使用Qt 开发图形界面的软件
3DSlicer, a free open source software for visualization and medical image computing AcetoneISO:镜像文件挂 ...
- Html - Bootstrap 头部
<div class="container"> <div class="row clearfix"> <div class=&qu ...
- Nova相关命令收集
1. nova list 2. sudo nova-manage service list 8. 创建/删除浮动IP池 nova floating-ip-bulk-create 192.168.0.2 ...