Faxtory模式用来实例化类型。最简单的工厂是只有一个方法并只实例化一种类型。这样的工厂并不能解决所有情况下的所有问题,因此必须使用不同的实例化策略。所有这些策略都是创建式的模式,其操作与工厂很相似。在本节我们将专门研究为什么需要使用帮助类型,以及如何创建插件,如何根据计划实现对象以及什么时候克隆对象。

  需要帮助类型

  用来实例化其他类型的帮助类型已经在本章前的多个地方阐述过了,而且也解释了为什么 应该使用帮助对象,但还没有详述其中原因。

  帮助对象使得向使用者隐藏实例化一个类型的详细过程变得更为简单。使用者使用new关键字来实例化一个实现了接口的类型。要记住,一个接口的实现是模块化的。可能一种实现需要在一套条件下操作,而另一种实现又使用另一套完全不同的操作条件。最简单的例子就是一种实现需要被当做单例,而另外一种实现可以为每个方法调用都实例化一次。(单例是指一个类型只有单一实例。)下面的代码演示了不同的操作条件:

  public interface SimpleInterface {
  internal class MultipleInstances : SimpleInterface { }
  internal class SingleInstance : SimpleInterface {
  }
  public class SimpleInterfaceFactory {
  public static SimpleInterface FirstType() { return new MultipleInstances();
  }
  private static SingleInstance _instance; public static SimpleInterface SecondType() { if( _instance == null) {
  _instance = new SingleInstance();
  }
  return —instance;

  接口SimpleInterface被看做一个由类MultipleInstances和SingleInstance实现的可重用的类型。SingleInstance类的不同之处在于只能存在一个实例。工厂类SimpleInterface有两个将实例化这两个类型的方法。方法FirstType是个标准工厂。不同的是方法SecondType只会实例化SingleInstance类的一个实例。在方法SecondType中,做了一个对全局变量_instance的测试。例如.net知识站:www.hlj-aptech.com,如果变量_instance是null,就会分配一个新的SingleInstance实例。在测试后,对变量_instance的引用返回给调用者。无论方法SecondType被调用多少次都会返回同一个实例。

  方法SecondType的调用者并没有意识到返回的接口实例是同一个。这就是使用帮助类型来实例化一个类型的主要目标。帮助类型可以设置被实例化类型的操作条件。被实例化的类型返回一个接口还是默认基类或者类都无所谓。可以向帮助类型的使用者保证的是,无论返回的是什么对象实例,它都是一致的并且具有正确的操作环境。

  工厂SimpleInterface包含两个方法,FirstType以及SecondType。大多数工厂都由多个实例化方法构成。一般来讲,这样的工厂会有适合一组实现的实例化方法。如果接口跟运输方法有关,那么对于所有的汽车会有一个工厂,而对所有轮船则会有另外一个工厂。这种多方法工厂的目的是创建基于单一工厂的一组类型的实现。
  
  更多.net知识就在北大青鸟知识库。
10-03 07:58