OOP 中的工厂是什么

2023-11-27

我对“工厂相关”设计模式及其 OOP 实现的理解一直非常简单。

  • A 《工厂方法》是类内部的方法,该方法具有接口(或抽象类)作为返回类型,并基于某些内部逻辑构造实现该接口的对象。
  • A “工厂”是一个只包含工厂方法的类
  • An 《抽象工厂》是一个仅包含工厂方法的接口(或抽象类)

但我最近偶然发现了有关该主题的维基百科文章(Factory, 抽象工厂)这让我有些困惑,尤其是关于什么是“工厂”处于面向对象编程中。

以下是几段引述:

  1. 返回“新”对象的子例程可以称为“工厂”,如工厂方法或工厂函数。
  2. 工厂用于各种设计模式
  3. “抽象工厂模式”是一种构建工厂集合的方法。
  4. 工厂是代码中构造对象的具体类的位置

这引起了一些问题:

(1)&(2) 这是否意味着工厂不是一个类或一个对象,而是一段逻辑?

(2)“Factory”本身不是一种模式吗?

(3) 这里的“收集”是什么意思?这只是一种说法“你可以有几个实现相同接口的工厂(这是一个抽象工厂)”吗?

(4)什么???

谁能澄清这意味着什么?难道我最初对工厂的理解不正确吗?


看这个wiki其中说:

在面向对象编程(OOP)中,工厂是一个对象 创建其他对象 - 正式工厂是一个函数或方法 从某些返回不同原型或类的对象 方法调用,假定是“新的”。[a] 更广泛地说,a 返回“新”对象的子例程可以称为 “工厂”,如工厂方法或工厂函数。这是一个基本的 OOP 中的概念,并构成了许多相关软件的基础 设计模式。

所以具体回答你的问题:

(1)&(2) 这是否意味着工厂不是一个类或一个对象,而是一段逻辑?

不,这意味着您可以使用对象(工厂)创建其他对象。

(2)“Factory”本身不是一种模式吗?

有不同的设计模式,工厂模式就是其中之一。因此,当您使用工厂创建对象时,创建其他对象的模式就是“工厂模式”

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OOP 中的工厂是什么 的相关文章

  • 两个对象相互依赖。那不好吗?

    当我为我的项目构建自己的系统时 我学到了很多关于设计模式的知识 我想问你一个我找不到答案的设计问题 目前我正在使用套接字构建一个带有多个客户端的小型聊天服务器 现在我有三门课 人级其中包含昵称 年龄和房间对象等信息 房间级它保存诸如房间名称
  • NHibernate 中具有不同类型答案的问题

    我正在尝试找到一个问卷问题的简洁解决方案 假设我有一个Questionnaire类有一个集合Answers e g public class Questionnaire public virtual ISet
  • 为什么我们不能在函数式接口中重载抽象方法? (爪哇)

    所以我熟悉java中的函数式接口 以及它们与lambda表达式的使用 一个函数式接口只能包含一个抽象方法 当从 lambda 表达式使用这一孤独方法时 您不需要指定其名称 因为接口中只有一个抽象方法 编译器知道这就是您正在引用的方法 Exa
  • Java API 中单例类的示例

    Java API 中单例设计模式的最佳示例有哪些 是个Runtime类单例 我只想到两个例子 java lang Runtime getRuntime http java sun com javase 6 docs api java lan
  • 这是依赖注入吗?这是一种不好的做法吗?

    我有一个小框架 我是这样编码的 我不确定这是否称为依赖注入 我不知道它是否像设计模式 我也不知道并且想知道是否通过 this因为 param 是一种不好的做法 看看这个 不是一个有效的示例 只是将这些代码写入浏览器中以供解释 This is
  • 检查一个类是否是另一个类的子类

    我想在不创建实例的情况下检查一个类是否是另一个类的子类 我有一个类 它接收类名作为参数 作为验证过程的一部分 我想检查它是否属于特定的类系列 以防止安全问题等 有什么好的方法可以做到这一点吗 is subclass of http php
  • Delphi:写入后代类中私有祖先的字段

    我需要修复第三方组件 该组件的类具有私有变量 该变量由其后代主动使用 TThirdPartyComponentBase class private FSomeVar Integer public end TThirdPartyCompone
  • 策略模式还是命令模式?

    假设我有一个金融交易列表 我需要针对这些交易执行一系列验证规则 一个例子是我有一笔购买产品的交易 但是首先我需要验证交易中的帐户是否有足够的可用资金 产品没有售完等 由于这些规则 交易将是标记为拒绝 并应指定错误代码 当然 我正在考虑用一个
  • R 中使用 `UseMethod()` 与 `inherits()` 来确定对象的类

    如果我需要根据 R 对象的类以不同的方式处理它们 我可以使用if and else在单个函数内 foo lt function x if inherits x list Foo the list else if inherits x num
  • 静态库中的单例类

    假设我在静态库中有一个单例类 S 它可以与其他动态库 D1 D2 D3 链接 因此 据我了解 类 S 在每个 D1 D2 和 D3 中都会有一个单独的实例 即使它不是单例 如全局 这也是正确的 有什么办法可以防止S类的多副本吗 我无法将单例
  • 使用元类的 __call__ 方法而不是 __new__?

    在讨论元类时 the docs http docs python org reference datamodel html state 您当然也可以重写其他类方法 或添加新的 方法 例如定义一个自定义 call 方法中的 元类允许在调用类时
  • 使用 NSError 检查错误的正确结构

    我正在编写各种例程 并尽力保持其整洁和重构 我正在创建的方法开始看起来与此代码类似 IBAction buttonPress id sender Create Document Shopping List with this documen
  • 无法在类对象的 ArrayList 中存储值。 (代码已编辑)

    这基本上是一个 Java 代码转换器 它涉及一个 GUI 让用户输入类类型 名称和方法 为了存储值 我创建了一个类VirtualClass与ArrayList
  • 什么是对象序列化和反序列化?

    什么是对象序列化 and 反序列化 序列化与读取对象的属性 然后用它们填充 DataRow 的列 最后将 DataRow 保存在数据库中等普通技术有什么区别 序列化通常是指创建可用于存储 可能在文件中 通过网络传输或仅用于进程之间传输的数据
  • 为什么抽象类应该实现抽象基类的抽象方法?

    在下面的示例中 该类Derived实现抽象方法method从课堂上Main 但我想不出在抽象中填写方法体的理由Derived类的实现 当然 我应该只在实际类中实现抽象方法 那么我怎样才能避免这样做呢 我还可以做些什么 abstract cl
  • UML类图:抽象方法和属性是这样写的吗?

    当我第一次为一个小型 C 项目创建 uml 类图时 我在属性方面遇到了一些麻烦 最后我只是将属性添加为变量 lt
  • C# 中的接口继承

    我试图解决我在编写应用程序时遇到的相当大的 对我来说 问题 请看这个 为了简单起见 我将尝试缩短代码 我有一个名为的根接口IRepository
  • 为什么工厂模式会这样工作?

    我从未真正研究过工厂模式 今天决定花时间根据本文创建一个快速示例 http msdn microsoft com en us library ee817667 aspx http msdn microsoft com en us libra
  • 进度状态报告模式

    我正在实现需要显示进程栏 或进度百分比 的长时间运行的进程 长时间运行的过程的整体逻辑很复杂 各种分页数据检索 因此 我最终在代码中的不同位置硬编码了大量百分比 在更新完成百分比时 什么被认为是最佳设计模式 我发现 JFace 周围使用的模
  • 为什么不允许 System.out.println(super) ?

    Why is System out println super 不允许 System out println this 这没问题并且this toString 自动调用并打印 当然 用实例变量代替也可以this 然而 this and su

随机推荐

  • Ajax 无法在 android webview 中工作

    我正在 webview 中加载一个网站 我们在网站中使用了 Ajax 它在网络浏览器和移动浏览器上也工作正常 但在 android webview 中 ajax 不起作用 控制台中没有错误 这是我的代码 public class Activ
  • F#如何扩展泛型数组类型? [复制]

    这个问题在这里已经有答案了 下列的这个问题我想知道如何 或是否 可以扩展通用 F 数组类型 我可以这样做 type System Array with member a Last a GetValue a Length 1 但正如托马斯提到
  • '#' 在 C 中到底做什么? [复制]

    这个问题在这里已经有答案了 我有一个程序 include
  • Automapper - 将多对多关联映射到平面对象的最佳实践

    我有两个实体 Employee and Team 我想要的是一个EmployeeForm具有Name of the Team 我怎样才能实现这个使用自动映射器 我当前的 解决方案 如下 Mapper CreateMap
  • 如果我不知道直到偏移量,我可以从 kafka 主题创建 RDD 吗?

    KafkaUtils createRDD将 offsetRanges 作为参数 我不知道我想读取的主题的直到偏移量 我最多想阅读该主题中的前 30 条消息 我看到有一个KafkaCluster html getLatestLeaderOff
  • 如何在 x86 平台上使用 gcc 声明内存范围不可缓存?

    虽然我已经阅读了有关此的 movntdqa 指令 但已经找到了一种干净的方法来表示不可缓存的内存范围或读取数据 以免污染缓存 我想从海湾合作委员会做到这一点 我的主要目标是交换到大型数组中的随机位置 由于数据恢复很少 希望通过避免缓存来加速
  • 如何在传递给 DataTable Select() 的字符串中包含撇号?

    The dt Select string 给出错误missing operand when apostrophe符号在字符串中 有什么方法可以解决这个错误 或者如何处理这个错误 String value Rubens Home value
  • 参考 ASP.NET Core MVC Web 应用程序 (RC2) 的完整框架库项目?

    我目前正在使用 ASP NET Core MVC RC2 它应该支持从 Core MVC Web 应用程序项目引用完整的框架库项目 但我似乎无法让它发挥作用 我有一个现有的完整框架库项目 我想将其与新的 Core MVC Web 应用程序项
  • Grails 日期验证的最小约束

    我是 grails 和 groovy 的新手 我有一个带有开始和结束日期的项目域类 我想添加一个约束 指定结束日期需要大于开始日期 然后项目的另一个子对象需要使其开始日期和结束日期与父项目的日期进行验证 这是否可以通过 min 约束实现 或
  • 我的 lambda 参数真的会影响我的本地参数吗?

    我正在处理一些 C 代码 它获取一些数据 并将其转发到传入的函数 void foo int data void fun int fun data 以下内容在没有警告的情况下工作 void bar int data int main int
  • 有没有办法用history.js 来判断状态的走向?

    正如标题所说 我希望能够表演出不一样的作品onstatechange事件如果pushState函数被调用 而不是back功能 或者 如果go函数为负函数或正函数 Example if History pushState or History
  • 如何更改Servlet 3.0 Spring MVC分段上传表单的字符编码?

    我有一个非常简单的 JSP Servlet 3 0 Spring MVC 3 1 应用程序 在我的其中一个页面上 我有多种表格 其中一种表单允许用户上传文件 因此配置为enctype multipart form data 我在 web x
  • 罗盘校准objective-c

    我尝试在我的 ios 应用程序中使用指南针 我有一个问题 如果我实施locationManagerShouldDisplayHeadingCalibration方法和return YES 然后校准显示一直显示 但我应该让它像苹果地图一样 I
  • 注释中的通用类型

    考虑以下代码 import java lang annotation Retention import java lang annotation RetentionPolicy public class AnnotationTest Gen
  • Azure 应用程序网关的自定义域

    我正在尝试使用自定义域名创建应用程序网关 但不断收到错误消息 无法指定域名标签 我想知道我是否做错了什么或者天蓝色应用程序网关不可能拥有自定义域名 以下是我在天蓝色应用程序网关方面学到的经验教训 1 Application gateway
  • Firebase Android 离线性能

    当单个节点下存储大约 5000 个子节点时 在使用离线功能时初始化 firebase 会变得非常慢 执行第一个查询大约需要 30 秒 初始化后 执行后续查询 例如列出前 25 个子节点 只需不到一秒的时间 我正在利用以下属性来启用离线功能
  • Grails 中的多个文件上传

    我正在努力整合优秀的来自 blueimp 的 jquery 文件上传进入 Grails 2 0 并为此编写一个新插件 我知道有已经是插件了 但它不使用资源 并且已经9个月没有更新了 jquery file upload在那段时间发生了很大的
  • 收集器的组合器功能可以用于顺序流吗?

    示例程序 public final class CollectorTest private CollectorTest private static
  • 如何用符号表示用户通过电子邮件发送给我的 Mac OS X 应用程序崩溃报告?

    我正在开发一个应用程序 我已将其发送给一些测试人员 在启动应用程序的短短几分钟内 用户就遇到了崩溃 当弹出窗口说应用程序崩溃时 他复制了详细信息部分中的所有文本并将其通过电子邮件发送给我 我已将文本保存到纯文本文件中 并为其指定了 cras
  • OOP 中的工厂是什么

    我对 工厂相关 设计模式及其 OOP 实现的理解一直非常简单 A 工厂方法 是类内部的方法 该方法具有接口 或抽象类 作为返回类型 并基于某些内部逻辑构造实现该接口的对象 A 工厂 是一个只包含工厂方法的类 An 抽象工厂 是一个仅包含工厂