在C#中应用工厂模式
工厂方法模式来自于创建模式的分类,创建模式是最好的处置创建对象的方式,工厂方法提供了一个简单的
决策,该决策得出了这样一个类,该类能够返回一个抽象基类的几个子类的对象,这里抽象基类以来与提供的
信息.
"为每一个创建的对象定义一个接口,但是让子类决定由哪个类去初始化,工厂方法让一个类遵从子类的指令去初始
化." --"设计模式" Gamma et al., Addison-Wesley, ISBN:0-201-63361-2"
非软件实例
喷射模型展示了这种模式, 朔料玩具厂处理熟料模型粉末,并且喷射朔料到设计好造型的模子里, 这个玩具类被
模子决定了,
一个工厂模型是一个返回几个可能的类之一的一个实例,这几个可能的类依赖于提供给它们的数据,一般来讲,
所有的类都应该有一个通用的基类和通用的方法,但是方法的实现可能不同.
下面的 UML 表示了工厂方法模式,在这个例子中,我们没有直接创建类Derived1 和Derived2 ,而是使用
工厂类的 getObject() 方法,根据传递的参数去返回一个合适的实例.这样的方法一般叫做工厂方法.工厂
方法可以是静态的也可以是非静态的.
C#中实现工厂方法:
//In Factory method pattern,
//A Factory class contains a factory method is used for creating the object.
//This factory method can be either static or non-static.
class Factory
{
public Base GetObject(int type)
{
Base base1 = null;
switch (type)
{
case 1:
base1 = new Derived1();
break;
case 2:
base1 = new Derived2();
break;
}
return base1;
}
}
interface Base
{
void DoIt();
}
class Derived1 : Base
{
public void DoIt()
{
Console.WriteLine("Derived 1 method");
}
}
class Derived2 : Base
{
public void DoIt()
{
Console.WriteLine("Derived 2 method");
}
}
//--------Client class----------
//Client class needn't know about instance creation.
//The creation of Product is
//deferred to the Factory class
class MyClient
{
public static void Main()
{
Factory factory = new Factory();//Decides which object must create.
Base obj = factory.GetObject(2);
obj.DoIt();
}
}
这就是工厂方法的基本规则, 我们创建了一个抽象,这个抽象决定了哪几个可能的类被返回, 并且返回一个.之后
我们就能够调用类实例的方法,甚至不需要实际上在使用被继承类是哪一个,对象的建立发生在工厂类内的一个
单独的地方.
记住工厂类可以包含很多个工厂方法,甚至这些工厂方法能够是静态或者非静态.