快速实现—简易抽象工厂的实现和调用

抽象工厂的实现:
using System;
using System.Reflection;

namespace FactorySalary
{
    /// <summary>
    /// AbstractFactory类
    /// </summary>
    public abstract class AbstractFactory
    {
        public static AbstractFactory GetInstance()
        {
            string factoryName = ConfigurationManager.AppSettings["FactoryName"];

            AbstractFactory instance;

            if(factoryName != "")
                instance = (AbstractFactory)Assembly.Load(factoryName).CreateInstance(factoryName);
            else
                instance = null;

            return instance;
        }

        public abstract Tax CreateTax();

        public abstract Bonus CreateBonus();
    }
}

配置文件:
(可配置为AmericanFactory,ChineseFactory,JapanFactory等,动态在抽象工厂中实例化)

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>
        <add key="factoryName" value="AmericanFactory"></add>
    </appSettings>
</configuration>


客户端调用:

using System;

namespace FactorySalary
{
  public class Calculator
  {
     public static void Main(string[] args)
     {
     Tax taxF = new AbstractFactory().CreateTax();
     double taxVal = taxF.Calculate();

     Bonus bonusF = new AbstractFactory().CreateBonus();
     double bonusVal = bonusF.Calculate();

     double salaryTotal = 4000 + bonusVal - taxVal;

     Console.WriteLine(String.Format("{0} salary is:{1}",ConfigurationManager.AppSettings["FactoryName"].Replace("Factory",""),salaryTotal));  
     Console.ReadLine();
     }
  }
}

 

posted @ 2011-04-12 16:50  梦幻星空  阅读(212)  评论(0)    收藏  举报