有关抽象工厂模式的疑问。
看了一篇讲“抽象工厂模式”的文章,先谈谈小弟的理解:
抽象工厂模式,就是由一系列的“产品集类”,组合在一起,而这些“产品集类”由都继承自一些公用的结口。 “工厂中的抽象类”包含一些公用的抽象方法,而抽象方法,则提供了客户访问工厂的路径,同时一些方法通过“.net反射”技术动态的加载程序集中的类,产生“子工厂”。从而使客户端只需要依赖于抽象工厂中的抽象方法,而屏蔽掉了具体实现功能的类。抽象工厂和接口同时使用,接口封闭了各个“产品集类”的功能源码,同时有提供了扩展其它产品的功能。而“抽象子工厂”中的方法,则提供了访问接口下具体子类的方式。不知道小弟理解的对不对?
现在的疑问是关于“屏蔽掉了具体实现功能的类”的实现。下面是一个访问抽象工厂的实例:
主程序:
namespace AbstractFactory
{
/// <summary>
/// 客户端程序调用
/// </summary>
public class Calculator 
{
public static void Main(string[] args) 
{
AbstractFactory factory = CommonFactory.GetInstance();    获取抽象工厂的实例
Bonus bonus = factory.CreateBonus();
double bonusValue = bonus.Calculate();问题:在抽象工厂类中访问抽象方法“CreateBonus()”,就可以访问到“子抽象工厂”中具体实现返回“产品类实例”功能的抽象方法吗???“子抽象工厂”只是继承了这个方法啊?不明白,也就是在“抽象工厂”中可以访问“子抽象工厂”中具体实现“抽象工厂”声明的抽象方法的方法体吗?
Tax tax = factory.CreateTax();
double taxValue = tax.Calculate();double salary = 4000 + bonusValue - taxValue; Console.WriteLine("Salary is:" + salary);
Console.ReadLine();
}
}
}

解决方案 »

  1.   

    你看到这一段了吗?
    using System;namespace FactorySalary
    {
        /**//// <summary>
        /// Factory类
        /// </summary>
        public class Factory
        {
            public Tax CreateTax()
            {
                return new ChineseTax();
            }        public Bonus CreateBonus()
            {
                return new ChineseBonus();
            }
        }
    }
      

  2.   

     private static readonly string path = ConfigurationManager.AppSettings["FactoryKey"].ToString();        public static IAdbanner CreateAdbanner()
            {
                string classname = path + ".Adbanner";
                return (IAdbanner)System.Reflection.Assembly.Load(path).CreateInstance(classname);
            }