上图为UML图,简单工厂模式解决对象的创建问题。
一、创建一个Operation基类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DesignModeDemo
{
public class Operation
{
public double Num1
{
get;
set;
}
public double Num2
{
get;
set;
}
public virtual double Operate()
{
double result = 0d;
return result;
}
}
}
二、创建加、减、乘、除的子类,继承基数,重写Operate()方法。实现多态。注意:业务操作类对用户来说,不需要了解其业务实现内容机制,故业务类都是内部类,封装。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DesignModeDemo
{
class OperationAdd : Operation
{
public override double Operate()
{
double result = 0d;
result = Num1 + Num2;
return result;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DesignModeDemo
{
class OperationSubtract:Operation
{
public override double Operate()
{
double result = 0d;
result = Num1 - Num2;
return result;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DesignModeDemo
{
class OperationMultiply:Operation
{
public override double Operate()
{
double result = 0d;
result = Num1 * Num2;
return result;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DesignModeDemo
{
class OperationDivide:Operation
{
public override double Operate()
{
double result = 0d;
if (Num2 != 0)
{
result = Num1 / Num2;
}
return result;
}
}
}
三、简单运算工厂类,根据运算符,实例化指定的业务类。注意这里使用静态方法。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DesignModeDemo
{
public class OperationFactory
{
public static Operation CreateOperation(string operation)
{
Operation ope = null;
switch (operation)
{
case "+":
ope = new OperationAdd();
break;
case "-":
ope = new OperationSubtract();
break;
case "*":
ope = new OperationMultiply();
break;
case "/":
ope = new OperationDivide();
break;
}
return ope;
}
}
}
Console.WriteLine("请输入数字A:");
string num1 = Console.ReadLine();
Console.WriteLine("请选择+,-,*,/");
string ope = Console.ReadLine();
Console.WriteLine("请输入数字B:");
string num2 = Console.ReadLine();
Operation operation = OperationFactory.CreateOperation(ope);
operation.Num1 = double.Parse(num1);
operation.Num2 = double.Parse(num2);
Console.WriteLine(string.Format("结果是:{0}", operation.Operate()));