设计模式:重读(抽象工厂模型)

建议在如下情况中,选用抽象工厂模式 :

书本总结: 抽象工厂着重的就是为一个产品簇选择实现,定义在抽象工厂里面的方法通常是有联系的,它们都是产品的某一部分或者是相互依赖的。

             抽象工厂模式主要在于应对“新系列”的需求变化。其缺点在于难于应付“新对象”的需求变动。

个人总结:当一些有关联的方法集合(有关联的方法: 就是这些方法集合在一起,可以完成某一件独立的事,或者产生某一个对象),针对不同的需求,或者环境,做出行为一致,而细节实现不一致的操作时。

      具体的适用场景如下:
      如果希望一个系统独立于它的产品的创建,组合和表示的时候,换句话说,希望一个系统只是知道产品的接口,而不关心实现的时候。
      如果一个系统要由多个产品系列中的一个来配置的时候,换句话说,就是可以动态的切换产品簇的时候。
      如果要强调一系列相关产品的接口,以便联合使用它们的时候              

经典实例:

微软提供的 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";
        }
    }

 

posted on 2014-04-14 18:01  为人为梦  阅读(148)  评论(0编辑  收藏  举报

导航