Tyl*_*ter 3 language-agnostic oop factory
所以,谈到工厂的主题,我想知道他们是如何建立的.
从我的立场,我可以看到3种类型的工厂:
一体
一个工厂,基本上包含应用程序中使用的所有类.感觉它只是为了拥有一个工厂而拥有一个工厂,而且并不真正感觉有条理.
示例(其中ClassA,Class B和ClassC没有任何共同之处,除非在同一个App中):
class Factory
{
public static function buildClassA()
public static function buildClassB()
public static function buildClassC()
}
Run Code Online (Sandbox Code Playgroud)
提供的代码示例使用PHP.但是,这个问题与语言无关.
内置工厂
下一个是将静态函数与常规函数混合,以便创建特殊的创建模式(请参阅此问题)
例:
class ClassA
{
public static function buildClass()
public function __construct()
}
Run Code Online (Sandbox Code Playgroud)
工厂在旁边
我能想到的最后一个是为个别班级或个别班级设立工厂.这似乎可变,以统一的方式使用.
示例(其中ClassA,B和C相关,并且1,2和3相关):
class FactoryAlpha
{
public static function buildClassA()
public static function buildClassB()
public static function buildClassC()
}
class FactoryNumeric
{
public static function buildClass1()
public static function buildClass2()
public static function buildClass3()
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:所有这些糟糕的想法,其中任何一个都是坏主意吗?还有其他创建工厂的方法吗?这些中的任何一个都是好主意吗?什么是创建工厂的好/最佳方式.
工厂的要点似乎是使用它的代码不需要知道将构造哪个具体类(这应该通过配置工厂来处理).这似乎排除了"All-in One"和"Factory-on-the-Side".
我喜欢Java库经常使用的方法:您有一个创建Factory的静态方法.Factory具有一个用于创建实例的getInstance方法.这为您提供了两个配置点(通过系统属性):默认的FactoryImpl有许多设置,例如它应该生成的类,如果这些配置选项不够,您也可以完全换掉FactoryImpl.
至于"All-in One"与"Factory-on-the-Side",工厂不应该生产我认为不相关的课程.同样,它是Java术语,每个工厂都生成某个接口的实例.
"All-in-One"听起来像是应该用Dependency Injection取代的东西(你有一个产生各种实例并将它们注入应用程序的容器).