设计模式(2)---工厂模式
一、引言
上一篇介绍了最基本的简单工厂模式,其中提到:简单工厂模式系统难以扩展,一旦添加新产品就不得不修改简单工厂方法,如此会造成简单工厂的实现逻辑过于复杂,本文介绍的工厂模式可以有效的解决此问题。
二、定义:
工厂模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
工厂模式实现时,客户端需要决定实例化哪一个工厂类实现运算类,选择判断的问题还是存在的,即:工厂方法把简单工厂的内部逻辑判断转移到了客户端来进行。如果需要增加功能,则修改客户端。
三、UML图
角色:
抽象工厂Creator:声明工厂方法,返回一个产品。
具体工厂角色ConcreteCreator:实现生成具体产品的方法,返回一个具体产品。
抽象产品角色Product:上述所有类的父类或者是接口。
具体产品角色Concrete Product:由工厂类创建出来的具体的产品实例。
UML图:
四、举例说明:
在简单工厂模式中用实现加减乘除的实例进行具体说明,本节将继续使用此例说明工厂模式。
抽象产品:
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; } }