language-agnostic - 你如何创建你的工厂?

标签 language-agnostic oop factory

所以,谈到工厂这个话题,我想知道它们是如何设置的。

从我站的地方,我可以看到 3 种类型的工厂:

一体化

基本上包含应用程序中使用的所有类的工厂。感觉就是为了有工厂而有工厂,并没有真正的结构感。

示例 (其中 ClassA、Class B 和 ClassC 除了在同一个 App 中之外没有任何共同点):

class Factory
{
 public static function buildClassA()
 public static function buildClassB()
 public static function buildClassC()
}

提供的代码样本是用 PHP 编写的。但是,这个问题与语言无关。

内置工厂

下一个是将静态函数与常规函数混合以创建特殊的创建模式(参见 this question)

示例:

class ClassA
{
 public static function buildClass()
 public function __construct()
}

工厂现场

我能想到的最后一个是为单个类或单个类集创建一个工厂。这似乎只是以统一的方式使用变量。

示例(其中 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()
}

我的问题是:所有这些都是坏主意吗?其中任何一个都是坏主意吗?还有其他创建工厂的方法吗?这些实际上是好主意吗?什么是创建工厂的好/最好方法。

最佳答案

工厂的要点似乎是让使用它的代码不需要知道将构造哪个具体类(这应该通过配置工厂来处理)。这似乎排除了“一体化”和“工厂就地”的可能性。

我喜欢 Java 库经常使用的方法:您有一个创建工厂的静态方法。 Factory 有一个创建实例的 getInstance 方法。这给了你两点配置(通过系统属性):默认的 FactoryImpl 有一些设置,比如它应该产生的类,如果这些配置选项不够用,你也可以完全换掉 FactoryImpl。

至于“All-in One”与“Factory-on-the-Side”,我认为工厂不应该生产不相关的类。同样,用 Java 术语来说,每个工厂都会生成特定接口(interface)的实例。

“一体化”听起来像是应该用依赖注入(inject)(您有一个容器可以生成各种实例并将它们注入(inject)到应用程序中)代替的东西。

关于language-agnostic - 你如何创建你的工厂?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2181269/

相关文章:

algorithm - 按字典顺序生成 k 组合

java - 如何在java中返回一个可由其他对象访问的数组?

language-agnostic - 伪随机数发生器

language-agnostic - 手动分配实体的 ID 是个好主意吗?

c++ - 模板函数以外的 OCaml 多态性示例?

python - 动态基类和工厂

c#泛型类工厂问题

c++ - "Self-Factory"模式

c++ - 查找要删除重复项的项目

c++ - 对象创建的特殊方式?