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();
}
}
浙公网安备 33010602011771号