gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 07:45:32 24 4
gpt4 key购买 nike

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

从我站的地方,我可以看到 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com