工厂方法模式--实现计算器
【摘要】
前言:工厂方法模式名字上和前面第一个模式差不多,那就是简单工厂。其实这个计算器的例子,在前面使用简单工厂实现了一遍了。这次只是和使用相同的例子和工厂方法模式进行对比。在实现工厂方法模式的过程中发现了这个模式的优缺点!
优点:是每一个类或者功能的独立性非常好。实现了可扩展,而不用修改其他的类。
缺点:每增加一个产品就需要增加一个产品工...
前言:工厂方法模式名字上和前面第一个模式差不多,那就是简单工厂。其实这个计算器的例子,在前面使用简单工厂实现了一遍了。这次只是和使用相同的例子和工厂方法模式进行对比。在实现工厂方法模式的过程中发现了这个模式的优缺点!
优点:是每一个类或者功能的独立性非常好。实现了可扩展,而不用修改其他的类。
缺点:每增加一个产品就需要增加一个产品工厂的类。
目录
类图:
代码:
form窗体:
-
//窗体通用声明
-
Operation oper =new Operation();//实例化运算类
-
double result = 0;//结果
-
//给按钮赋值
-
string NumberA = "";
-
string NumberB = "";
-
//区分AB的赋值标签,如果是fals就给A赋值。
-
//否则给B赋值。
-
bool flage = false;
-
//数字按钮
-
private void button1_Click(object sender, EventArgs e)
-
{
-
//判断赋值对象
-
if (flage)
-
{
-
NumberB += 1;
-
textBox1.Text = NumberB;
-
}
-
else
-
{
-
NumberA += 1;
-
textBox1.Text = NumberA;
-
}
-
}
-
//每一个数字按钮的代码,几乎一摸一样。除了代表的数字之外,
-
//其他的代码完全一样。所以就以1这个数字按钮为例就可以了。在这就不一一列举了!
运算:
-
private void button12_Click(object sender, EventArgs e)
-
{
-
flage = true;//更改赋值标签
-
//判断是否计算
-
IFactory operFactory = new AddFactory();//实例化加法工厂
-
oper = operFactory.CreateOperation();//创建加法运算
-
}
-
private void button11_Click(object sender, EventArgs e)
-
{
-
flage = true;//更改赋值标签
-
IFactory operFactory = new SubFactory();
-
oper = operFactory.CreateOperation();
-
}
-
private void button14_Click(object sender, EventArgs e)
-
{
-
flage = true;//更改赋值标签
-
IFactory opertFactory = new MulFactory();
-
oper = opertFactory.CreateOperation();
-
}
-
private void button14_Click(object sender, EventArgs e)
-
{
-
flage = true;//更改赋值标签
-
IFactory opertFactory = new MulFactory();
-
oper = opertFactory.CreateOperation();
-
}
-
private void button10_Click(object sender, EventArgs e)
-
{
-
-
//通过属性,给A和B赋值。
-
oper.NumberA = double.Parse(NumberA);
-
oper.NumberB = double.Parse(NumberB);
-
//计算结果
-
result = oper.GetResult();
-
//显示结果
-
textBox1.Text = result.ToString();
-
}
类:
运算类
-
namespace 计算器
-
{
-
/// <summary>
-
/// 运算类
-
/// </summary>
-
public class Operation
-
{
-
//两个数
-
private double _numberA = 0;
-
private double _numberB = 0;
-
/// <summary>
-
/// 第一个数
-
/// </summary>
-
public double NumberA
-
{
-
get { return _numberA; }
-
set { _numberA = value; }
-
}
-
/// <summary>
-
/// 第二个数
-
/// </summary>
-
public double NumberB
-
{
-
get { return _numberB; }
-
set { _numberB = value; }
-
}
-
/// <summary>
-
/// 计算方法
-
/// </summary>
-
/// <returns></returns>
-
public virtual double GetResult()
-
{
-
double result = 0;
-
return result;
-
}
-
}
-
}
-
namespace 计算器
-
{
-
/// <summary>
-
/// 加法类
-
/// </summary>
-
public class OperationAdd:Operation
-
{
-
/// <summary>
-
/// 加法
-
/// </summary>
-
/// <returns>计算结果</returns>
-
public override double GetResult()
-
{
-
double result = 0;
-
result = NumberA + NumberB;
-
return result;//返回结果
-
}//end Getresult
-
}
-
}
-
namespace 计算器
-
{
-
/// <summary>
-
/// 乘法类
-
/// </summary>
-
public class OperationMul:Operation
-
{
-
/// <summary>
-
/// 乘法
-
/// </summary>
-
/// <returns>结果</returns>
-
public override double GetResult()
-
{
-
double result = 0;
-
result = NumberA * NumberB;
-
-
return result;
-
}//end GetResult
-
}
-
}
-
namespace 计算器
-
{
-
public class OpertionDiv:Operation
-
{
-
public override double GetResult()
-
{
-
double result = 0;
-
-
if (NumberB==0)
-
{
-
result = 0;
-
}
-
else
-
{
-
result = NumberA / NumberB;
-
}//end if
-
return result;
-
}//end GetResult
-
}
-
}
-
namespace 计算器
-
{
-
/// <summary>
-
/// 减法
-
/// </summary>
-
public class OperationSub:Operation
-
{
-
public override double GetResult()
-
{
-
double result = 0;
-
result = NumberA - NumberB;
-
return result;
-
}//end GetResult
-
}
-
}
工厂方法:
-
namespace 计算器
-
{
-
//工厂接口
-
public interface IFactory
-
{
-
Operation CreateOperation();//创建具体运算
-
}
-
}
-
namespace 计算器
-
{
-
public class SubFactory:IFactory
-
{
-
public Operation CreateOperation()
-
{
-
return new OperationSub();//减法
-
}
-
}
-
}
-
namespace 计算器
-
{
-
/// <summary>
-
/// 加法工厂
-
/// </summary>
-
public class AddFactory:IFactory
-
{
-
/// <summary>
-
/// 创建加法运算
-
/// </summary>
-
/// <returns></returns>
-
public Operation CreateOperation()
-
{
-
return new OperationAdd();//实例化加法类
-
}
-
}
-
}
-
-
namespace 计算器
-
{
-
public class MulFactory:IFactory
-
{
-
public Operation CreateOperation()
-
{
-
return new OperationMul();//乘法
-
}
-
}
-
}
-
namespace 计算器
-
{
-
public class DivFactory:IFactory
-
{
-
public Operation CreateOperation()
-
{
-
return new OpertionDiv();//除法
-
}
-
}
-
}
结果:
文章来源: kangshihang.blog.csdn.net,作者:康世行,版权归原作者所有,如需转载,请联系作者。
原文链接:kangshihang.blog.csdn.net/article/details/102904817
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)