大话设计模式-简单工程模式
【摘要】
前言:
简单工厂模式是这23个模式里的第一个模式,也是比较简单和体现非常明确的一个模式。通过简单工厂可以非常好的体验出面向对象编程的好处,面向对象概念的重要性。也算是通过这个模式体验设计模式的好处把!
目录
概念:
需求:
实现:
业务逻辑:
运算基类:
运算具体的派生类:
运算...
前言:
简单工厂模式是这23个模式里的第一个模式,也是比较简单和体现非常明确的一个模式。通过简单工厂可以非常好的体验出面向对象编程的好处,面向对象概念的重要性。也算是通过这个模式体验设计模式的好处把!
目录
概念:
根据客户端的选择进行动态的实例化对象,也就是根据用户的需求来实例化具体的对象。
需求:
实现一个有加减乘除的计算器,利用简单工厂模式实现。
实现:
业务逻辑:
运算基类:
-
/// <summary>
-
/// 计算类
-
/// </summary>
-
public class Operation
-
{
-
private double _numberA = 0;
-
private double _numberB = 0;
-
public double NumberA
-
{
-
get { return _numberA; }
-
set { _numberA = value; }
-
}//end NumberA
-
public double NumberB
-
{
-
get { return _numberB; }
-
set { _numberB = value; }
-
}//end NumberB
-
//计算方法--虚方法
-
public virtual double GetResult()
-
{
-
double result = 0;
-
return result;
-
}
-
}//end Pperaton
运算具体的派生类:
-
/// <summary>
-
/// 加法运算,继承运算类。
-
/// </summary>
-
class OpertionAdd : Operation
-
{
-
//重新父类的计算方法
-
public override double GetResult()
-
{
-
double result = 0;//计算结果
-
result = NumberA + NumberB;//具体运算
-
return result;//返回结果
-
}//end Getresult
-
}//end OpertonAdd
-
/// <summary>
-
/// 减法
-
/// </summary>
-
class OpertiononSub : Operation
-
{
-
//重新父类的计算方法
-
public override double GetResult()
-
{
-
double result = 0;//计算结果
-
result = NumberA - NumberB;//具体运算
-
return result;//返回结果
-
}//end Getresult
-
-
}//end OPertionsub
-
/// <summary>
-
/// 乘法
-
/// </summary>
-
class OpertionMul : Operation
-
{
-
//重新父类的计算方法
-
public override double GetResult()
-
{
-
double result = 0;//计算结果
-
result = NumberA * NumberB;//具体运算
-
return result;//返回结果
-
}//end Getresult
-
}//end OpertionMul
-
/// <summary>
-
/// 除法
-
/// </summary>
-
class OpertionDiv : Operation
-
{
-
//重新父类的计算方法
-
public override double GetResult()
-
{
-
double result = 0;//计算结果
-
if (NumberB == 0)
-
throw new Exception("除数不能为0.");
-
-
result = NumberA / NumberB;//具体运算
-
return result;//返回结果
-
}//end Getresult
-
}
-
//end OpertionDiv
运算工厂:
-
/// <summary>
-
/// 简单工厂类,根据需求实例化类。
-
/// </summary>
-
public class OperationFactory
-
{
-
/// <summary>
-
/// 实例化具体的运算类
-
/// </summary>
-
/// <param name="operate">运算符</param>
-
/// <returns>返回具体实例化的类</returns>
-
public static Operation createOperate(string operate)
-
-
{
-
Operation oper = null;//实例化父类,从新赋值。
-
//判断
-
switch (operate)
-
{
-
case "+":
-
//把父类,转换成子类
-
oper = new OpertionAdd();//实例化加法类
-
break;
-
case "-":
-
//把父类,转换成子类
-
oper = new OpertiononSub();//实例化减法类
-
break;
-
case "*":
-
//把父类,转换成子类
-
oper = new OpertionMul();//实例化乘法类
-
break;
-
case "/":
-
//把父类,转换成子类
-
oper = new OpertionDiv();//实例化除法类
-
break;
-
-
}//end swithc
-
//返回结果
-
return oper;
-
}
-
}//end OperationFactory
客户端:
-
//确定按钮
-
private void button1_Click(object sender, EventArgs e)
-
{ //运算类
-
Operation ope;
-
//从新给父类,赋值。
-
-
ope = OperationFactory.createOperate(txt2.Text); //运算符
-
ope.NumberA = int.Parse(txt1.Text);//给A赋值
-
ope.NumberB =int.Parse( txt3.Text);//给B赋值
-
//调用计算方法,输出结果。
-
double result = ope.GetResult();
-
txt4.Text = result.ToString();
-
-
}
结果:
文章来源: kangshihang.blog.csdn.net,作者:康世行,版权归原作者所有,如需转载,请联系作者。
原文链接:kangshihang.blog.csdn.net/article/details/102934662
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)