简单工厂模式
简单工厂模式主要是利用分支(if..else 或者 switch..case),然后根据外部参数来决定客户端调用的具体对象。
而外部参数基本上是客户端传递进相应的工厂类(当然也可以不靠客户端传递,直接根据资源文件来确定)。
在更多的时候工厂类是直接返回个接口实例或者基类对象,这也意味着工厂类只负责对象创建,而基本不参与具体的逻辑处理或调用具体逻辑
简单的实例代码:
View Code
public interface MaterialInfo { DataTable GetMaterialInfo(); } //简单工厂:通过工厂来确定换回真正要调用的接口实例 public class SimpleFactory { private MaterialInfo info; public MaterialInfo GetInfo(int type) { switch (type) { case 1: info = new RawMaterialsInfo(); break; case 2: info = new SemifinishedInfo(); break; default: break; } return info; } } //原料 public class RawMaterialsInfo : MaterialInfo { public DataTable GetMaterialInfo() { return new DataTable(); } } //半成品 public class SemifinishedInfo:MaterialInfo { public DataTable GetMaterialInfo() { return new DataTable(); } } //客户端调用 public class ClientSimpleFatory { public DataTable GetMaterialInfo() { SimpleFactory single = new SimpleFactory(); MaterialInfo info = single.GetInfo(1); return info.GetMaterialInfo(); } }
可以看得出来,简单工厂比较简单,并没有什么复杂难懂的地方。
但是也应该看到此方式有些瑕疵(这是真的吗?),那就是如果有新的业务模型进来时,必须修改工厂类的分支判定。从而会导致分支判定不断的增加(这不OOP..)
至于客户端的修改,那是基本上无可避免的(参数放在资源文件上除外)