很显然,这个时候再利用简单工厂模式,就不太恰当。这个时候的变更实际上违背了设计原则中的开发封闭原则(对修改关闭,对扩展开放),单一职责原则(工厂类的作用)。
为了避免上述缺点,工厂方法模式对其做了扩展,对工厂类进行了进一步的抽象,使得我们的设计更加灵活。工厂方法模式主要包括四个部分:
1.抽象工厂角色:对具体工厂类的抽象,任何在模式中创建的具体对象的工厂类必须实现这个接口。
2.具体工厂角色:实现抽象工厂接口的具体工厂类。
3.抽象产品角色:对具体实现类的抽象,是每个具体实现类的父类或共同的接口。
4.具体产品角色:是抽象产品的具体实现。
这么说,理论的太多,读起来有点晕,还是结合具体的实例来的真切。这里对在简单工厂模式中的举例进行重新设计。
首先,我们通常会用到两种数据库(Sql server, Oracle),先对这两种具体产品进行抽象:
SQLDAL:
IDALFactory:
通常我们会把要用到的工厂名称作为配置信息写入配置文件,这样在需求变化的时候,就不用更改源代码。
这样,如果有新的需求,新增实现类(access),那么我们要做的就是新增实现了IDAL接口的具体类AccessDAL,和对应的此具体类的工厂类(AccessFactory).对于其他的任何对象,我们都不用改动。这就很好的实现了开发-封闭原则。
【实践】
用工厂方法模式对WMS入库作业进行休整。
说明:在利用反射的时候,通常是读取配置档案的信息来生成具体的类型。对于我们的不同的mvt的入库作业,可以在选择不同的mvt的同时就改变配置档案的信息,这样在反射的时候直接读取档案就可以获取有效信息。
}
SourceCode:/Files/Ivan-Yan/FactoryMathodPattern.rar
http://www.cnblogs.com/zhenyulu/articles/36590.aspx
http://www.cnblogs.com/Terrylee/archive/2006/01/04/310716.html