简单工厂模式就是用一个工厂来生产(实例)有共同属性和方法但又不相同的事物.可以很方便的增加有共同的方法和属性的事物.
个人认为的好处有:
1,增加有共同的方法和属性的事物,不会修改已有的事物.
2,结构清晰明了.
从一个计算器的例子里我们可以看出:
一个抽象类,加上四个操作运算类,最后一个工厂类.
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Operation
public abstract class Operation
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
protected double numberA;
protected double numberB;
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
private double result = 0;
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public Operation()
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public Double NumberA
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
set
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
this.numberA = value;
}
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public Double NumberB
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
set
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
this.numberB = value;
}
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public virtual Double Result
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
get
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
return result;
}
}
}
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Operator
public class OperationAdd:Operation
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
public override double Result
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
get
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
return base.numberA + base.numberB;
}
}
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
public class OperationSub : Operation
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
public override double Result
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
get
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return base.numberA - base.numberB;
}
}
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
public class OperationMul : Operation
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
public override double Result
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
get
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
return base.numberA * base.numberB;
}
}
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
public class OperationDiv : Operation
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
public override double Result
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
get
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
if (base.numberB == 0)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
throw new Exception("The divisor can not zero");
}
return base.numberA / base.numberB;
}
}
}
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Factory
public class OperationFactory
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
public static Operation CreateOperationFactory(string operate)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
Operation operation = null;
switch (operate)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
case "+":
operation = new OperationAdd();
break;
case "-":
operation = new OperationSub();
break;
case "*":
operation = new OperationMul();
break;
case "/":
operation = new OperationDiv();
break;
}
return operation;
}
}
static void Main(string[] args)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
Console.WriteLine("Please enter a digit A:");
string strNumberA = Console.ReadLine();
Console.WriteLine("Please enter a operator(+,-,*,/):");
string strOperator = Console.ReadLine();
Console.WriteLine("Please enter a digit B:");
string strNumberB = Console.ReadLine();
Operation operation = OperationFactory.CreateOperationFactory(strOperator);
operation.NumberA = Double.Parse(strNumberA);
operation.NumberB = Double.Parse(strNumberB);
Console.WriteLine(string.Format("{0} {1} {2} = {3}", strNumberA, strOperator,strNumberB, operation.Result));
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
}
posted @
2008-06-10 10:24
jackzhang
阅读(
307)
评论()
编辑
收藏
举报