在软件生产过程中,经常面临某个对象的创建工作,由于需求的变动,这些对象不断的变化,但他们的接口相对稳定,怎么样把这种易变的对象隔离出来让其它对象不因它的改变受到影响,在这样的前提下就产生了工厂模式。
1、工厂模式相当于创建实例对象new,所以很常用,举例说明:
有接口类Sample,及实现类SampleA、SampleB,可以如下创建,
Sample sA = new SampleA,
Sample sB = new SampleB,
但如果实现类很多的话,这样创建起来很麻烦,所以可以创建工厂类Factory,具体实现如下,
class Factory
{
public static Sample CreateInstance(int casetype)
{
swith(casetype)
{
case 1:
return new SampleA();
break;
case 2:
return new SampleB();
break;
}
}
}
(以下转)这样,在整个就不涉及到Sample的具体子类,达到封装效果,也就减少错误修改的机会,这个原理可以用很通俗的话来比喻:就是具体事情做得越多,越容易范错误.这每个做过具体工作的人都深有体会,相反,官做得越高,说出的话越抽象越笼统,范错误可能性就越少.好象我们从编程序中也能悟出人生道理?呵呵.
2、工厂方法中还有Factory Method(工厂方法)与Abstract Factory(抽象工厂),举例说明:
如果上面例子中还有类Sample2要创建,可以用抽象工厂方法,如下
public abstract class Factory
{
public abstract Sample CreateInstance();
public abstract Sample2 CreateInstance();
}
public class SimpleFactory:Factory
{
public Sample CreateInstance()
{
...
return new SampleA();
}
public Sample2 CreateInstance()
{
...
return new Sample2A();
}
}
public class ComplexFactory:Factory
{
public Sample CreateInstance()
{
...
return new SampleB();
}
public Sample2 CreateInstance()
{
...
return new Sample2B();
}
}
抽象工厂有一个关键要点,是因为SimpleFactory内,生产Sample和生产Sample2的方法之间有一定联系,所以才要将这两个方法捆绑在一个类中,这个工厂类有其本身特征,也许制造过程是统一的,比如:制造工艺比较简单,所以名称叫SimpleFactory。