工厂方法模式( FactoryMethod ):定义一个用于创建对象的接口 IFactory,在具体的ConcreteFactory子类中根据传进的参数即具体子类ConcreteProduct决定实例化哪一个IProduct产品,该模式使得一个类(即IProduct)的实例化延迟到其子类(即ConcreteProduct)
今晚看代码的时候看到工厂类中方法和参数都使用static修饰,于是很好奇的想为什么一定要使用静态方法。百度了一下,发现百度了一堆垃圾,根本没有找到自己想要的答案。后来去Stack Overflow,果然找到了相关的问题。因为是英文的,所以翻译过来并综合整理了一下。
为什么要在工厂模式中使用静态方法
工厂模式是一种封装对象创建的方法。如果不使用工厂模式,你就需要直接使用构造方法来创建对象:
Foo x = new Foo()
使用工厂模式,就可以取而代之的调用工厂方法:
Foo x = Foo.create()
工厂类的构造方法被标记为private,所以构造方法除了在类的内部被调用以外就不能够被访问。工厂类的其他方法被标记为static,这样就不需要在调用该方法之前必须首先拥有一个该类的对象。
使用工厂模式有一些好处。其一工厂类可以从许多子类(subclasses)(或者一个接口的实现)并返回它( One is that the factory can choose from many subclasses (or implementers of an interface) and return that. )。用这种方式调用方法可以通过参数来确定类的行为而不需要知道或者理解类的潜在的复杂层次(This way the caller can specify the behavior desired via parameters