简单工厂模式
面向对象的程序设计编程思想,是通过封装,继承,多态把程序的耦合度降低,用设计模式使得程序更加的灵活,容易修改,并且易于复用。下面我们就通过简单工厂模式的例子来具体了解一下。
简单工厂模式是属于创建型模式,又叫做静态工厂方法模式。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。通过学习一个计算器的例子来了解。
实例:
运算类:
//Operation运算类
public 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;
}
}
简单工厂模式
//简单工厂模式
public class OperationFactory
{
public static Operation createOperate(string operate)
{
Operation oper = null;
switch (operate)
{
case "+";
oper =new OperationAdd();
break;
case "-";
oper =new OperationSub();
break;
case "*";
oper =new OperationMul();
break;
case "/";
oper =new OperationDiv();
break;
}
return oper;
}
}
客户端代码
//客户端代码
class Program
{
static void Main(string[] args)
{
Operation oper;
oper = OperationFactory.createOperate("-");
oper.NumberA = 1;
oper.NumberB = 1;
double result = oper.GetResult();
}
}
类图:
简单模式优点:工厂类是整个模式的关键.包含了必要的逻辑判断,根据外界给定的信息,决定究竟应该创建哪个具体类的对象. 不必管对象究竟如何创建及如何组织的.明确了各自的职责和权利,有利于整个软件体系结构的优化。
缺点:由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。