代码改变世界

Factory Method--工厂方法模式

2010-05-01 14:46  yonger  阅读(142)  评论(0)    收藏  举报

.NET下的工厂方法模式[告诉我们将频繁变化的对象不必急着实例化(new),提供一个用户创建的抽象的类型(Abstract | interface),把类的实例化过程延迟到子类完成。]

        --FACTORY METHOD—请MM去麦当劳吃汉堡,不同的MM有不同的口味,要每个都记住是一件烦人的事情,我一般采用Factory Method模式,带着MM到服务员那儿,说“要一个汉堡”,具体要什么样的汉堡呢,让MM直接跟服务员说就行了。 

        注:委托(Delegate)是一类方法的抽象(如仅是某个特定的操作),抽象类型(Abstract | interface)是一组方法的抽象(如需要抽象业务实体)。

 

1.用泛型重构工厂模式

    public abstract class  AbstractCar
    {
        public abstract void Start();

        public abstract void Stop();
    }

    public class RedCar : AbstractCar
    {

        public override void Start()
        {
            Console.WriteLine("红车开动");
        }

        public override void Stop()
        {
            Console.WriteLine("红车停止");
        }
    }

    public class BlueCar:AbstractCar
    {
        public override void Start()
        {
            Console.WriteLine("蓝车开动");
        }

        public override void Stop()
        {
            Console.WriteLine("蓝车停止");
        }
    }

    //泛型工厂类

    public class Factory<T> where T:new()
    {
        public static T CreateFactory
        {
            get{ return new T(); }
        }
    }

    //配置文件

    public class Factorys

    {

        public static AbstractCar CreateFactory()

        {

            string factoryName=ConfigurationSettings.AppSettings["FactoryName"];

            //AbstractCar car = (AbstractCar)Assembly.Load("FactoryMethods").CreateInstance("FactoryMethods." + factoryName);

            AbstractCar car = (AbstractCar)Activator.CreateInstance(Type.GetType("FactoryMethods."+factoryName));

            return car;

        }

    } 

   //客户端调用

    class Program
    {
        static void Main(string[] args)
        {
            Factory<RedCar>.CreateFactory.Start();
            Factory<BlueCar>.CreateFactory.Stop();

            Factorys.CreateFactory().Start();

            Factorys.CreateFactory().Stop(); 

            Console.ReadKey();      

  }   

}