标签:Console opera double class 工厂 简单 OperationClass 设计模式 public
// 工厂生成对象类
public class OperationFactory
{
public static OperationClass GetOperation(string operationType)
{
OperationClass opera = null;
switch (operationType)
{
case "+":
opera = new AddOperation();
break;
case "-":
opera = new SubOperation();
break;
case "*":
opera = new MulOperation();
break;
case "/":
opera = new DivOperation();
break;
case "sqrt":
opera = new SqrtOperation();
break;
case "squa":
opera = new SquareOperation();
break;
default:
break;
}
return opera;
}
}
// 运算符基类
public abstract class OperationClass
{
public double NumA { get; set; }
public double NumB { get; set; }
public abstract double GetResult();
}
// 加号类
public class AddOperation : OperationClass
{
public override double GetResult()
{
return NumA + NumB;
}
}
// 减号类
public class SubOperation : OperationClass
{
public override double GetResult()
{
return NumA - NumB;
}
}
// 除号类
public class DivOperation : OperationClass
{
public override double GetResult()
{
try
{
if (NumB.Equals(0))
{
throw new DivideByZeroException("分母为零");
}
return NumA / NumB;
}
catch (DivideByZeroException ex)
{
Console.WriteLine(ex);
}
return 0;
}
}
// 乘号类
public class MulOperation : OperationClass
{
public override double GetResult()
{
return NumA * NumB;
}
}
// 开根号类
public class SqrtOperation : OperationClass
{
public override double GetResult()
{
return Math.Sqrt(NumA);
}
}
// 业务运用类
public class OperationOutput
{
public void Show()
{
OperationClass ope;
do
{
Console.WriteLine("请输入正确的运算符: * / + - sqrt squa");
ope = OperationFactory.GetOperation(Console.ReadLine());
}
while (ope == null);
Console.WriteLine("请输入第一个数字");
ope.NumA = double.Parse(Console.ReadLine());
if (!(ope is SqrtOperation))
{
Console.WriteLine("请输入第二个数字");
ope.NumB = double.Parse(Console.ReadLine());
}
Console.WriteLine("结果是:" + ope.GetResult());
Console.WriteLine();
}
}
缺点:每新增一种操作,就需要修改 OperationFactory 类的 GetOperation(string operationType) 方法,这违法了对扩展开放,对修改封闭的原则。
可通过工厂模式、抽象工厂的方式得到适当改善,可通过反射彻底改善。
标签:Console,opera,double,class,工厂,简单,OperationClass,设计模式,public
来源: https://www.cnblogs.com/MichaelLoveSna/p/14141421.html
本站声明:
1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。