using System;
using System.Collections.Generic;
using System.Text;
namespace 工厂方法_计算器
{
class Operation
{
private double _numberA = 0;
private double _numberB = 0;
public double NumberA
{
get { return _numberA; }
set { _numberA = value; }
}
public double NumberB
{
get { return _numberB; }
set { _numberB = value; }
}
public virtual double GetResult()
{
double result = 0;
return result;
}
}
class OperationAdd : Operation
{
public override double GetResult()
{
double result = 0;
result = NumberA + NumberB;
return result;
}
}
class OperationSub : Operation
{
public override double GetResult()
{
double result = 0;
result = NumberA - NumberB;
return result;
}
}
class OperationMul : Operation
{
public override double GetResult()
{
double result = 0;
result = NumberA * NumberB;
return result;
}
}
class OperationDiv : Operation
{
public override double GetResult()
{
double result = 0;
if (NumberB == 0)
throw new Exception("除数不能为0。");
result = NumberA / NumberB;
return result;
}
}
interface IFactory
{
Operation CreateOperation();
}
class AddFactory : IFactory
{
public Operation CreateOperation()
{
return new OperationAdd();
}
}
class SubFactory : IFactory
{
public Operation CreateOperation()
{
return new OperationSub();
}
}
class MulFactory : IFactory
{
public Operation CreateOperation()
{
return new OperationMul();
}
}
class DivFactory : IFactory
{
public Operation CreateOperation()
{
return new OperationDiv();
}
}
}
static void Main(string[] args)
{
IFactory operFactory = new MulFactory()
Operation oper = operFactory.CreateOperation()
oper.NumberA = 1
oper.NumberB = 2
double result=oper.GetResult()
Console.WriteLine(result)
Console.Read()
}
如果我现在需要增加其他运算,比如求M数的N次方,或者求M数的N次方根,这些功能的增加,在简单工厂模式里,我是先去加“求M数的N次方”功能类,然后去更改工厂方法,当中加“case”语句来判断,现在用了工厂方法,加功能类没问题,再加相关的工厂类,这也没问题,但要我去更改客户端,这不等于不但没有减化难度,反而增加了很多类的方法。
简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择