设计模式:重读(抽象工厂模型)
建议在如下情况中,选用抽象工厂模式 :
书本总结: 抽象工厂着重的就是为一个产品簇选择实现,定义在抽象工厂里面的方法通常是有联系的,它们都是产品的某一部分或者是相互依赖的。
抽象工厂模式主要在于应对“新系列”的需求变化。其缺点在于难于应付“新对象”的需求变动。
个人总结:当一些有关联的方法集合(有关联的方法: 就是这些方法集合在一起,可以完成某一件独立的事,或者产生某一个对象),针对不同的需求,或者环境,做出行为一致,而细节实现不一致的操作时。
具体的适用场景如下:
如果希望一个系统独立于它的产品的创建,组合和表示的时候,换句话说,希望一个系统只是知道产品的接口,而不关心实现的时候。
如果一个系统要由多个产品系列中的一个来配置的时候,换句话说,就是可以动态的切换产品簇的时候。
如果要强调一系列相关产品的接口,以便联合使用它们的时候
经典实例:
微软提供的 DbProviderFactory, OdbcFactory,OleDbFactory和SqlClientFactory 工厂类。访问数据库的操作基本一致,但是对不同的数据库访问的具体细节方法不一致。
具体代码实现如下:
/// <summary> /// 虚拟工厂 /// </summary> public abstract class BasicAbstractFactory { public static BasicAbstractFactory GetInstance() { //定义可配置的常量 string factoryName = "Method1"; BasicAbstractFactory instance; if (factoryName != "") instance = (BasicAbstractFactory)Assembly.Load(factoryName).CreateInstance(factoryName); else instance = null; return instance; } public abstract string Method1(); public abstract string Method2(); } public class Factory_One : BasicAbstractFactory { //TODO:可以将实现类做成单例模式 public override string Method1() { return "Factory_One" + "Method1"; } public override string Method2() { return "Factory_One" + "Method2"; } } public class Factory_Two : BasicAbstractFactory { //TODO:可以将实现类做成单例模式 public override string Method1() { return "Factory_Two" + "Method1"; } public override string Method2() { return "Factory_Two" + "Method2"; } }