抽象工厂与工厂方法(范围)

2024-02-21

工厂方法是类设计模式。抽象工厂使用了许多工厂方法。为什么抽象工厂是对象设计模式,而不是类设计模式?抽象工厂将实例化推迟到哪个对象?


抽象工厂模式将产品对象的创建推迟到 ConcreteFactory 子类。由于客户端期望 Factory 类(它是 ConcreteFactory 子类的父类)作为方法参数;根据传递的ConcreteFactory实例,创建相应的产品实例。因此,抽象工厂通过在运行时传递的 ConcreteFactory 实例上调用工厂方法来创建产品实例。因此,这就是对象设计模式。通常,这些具体工厂是单例工厂。

然而,工厂方法发生在类级别。必须创建一个新的 ConcreteFactory 类来实例化 ConcreteProduct。这个 ConcreteFactory 扩展了 Factory 类,它有一个返回 Product 的 create() 方法。 ConcreteFactory 重写 Factory 父类中定义的 create() 方法。

回复评论:

是的,工厂方法是参数化的,但在 AbstractFactory 中,您将能够调用传递的 ConcreteFactory 上的方法,从而使您能够在运行时切换到不同的 ConcreteFactory。但在 Factory 中,由于 create() 是类的一部分,因此如果您想创建具体产品,则必须创建扩展父 Factory 类的 ConcreteFactory。

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

抽象工厂与工厂方法(范围) 的相关文章

  • JavaFx 如何避免创建一个巨大的控制器

    我在 JavaFX 中有一个应用程序 它有带有菜单和工具栏的主场景 以及在按下菜单按钮之一后注入到该主场景中的较小场景 现在 HomeCntroller 负责场景组件 主场景 带有工具栏和菜单 和注入场景 如果注入的场景数量超过一个 这会导
  • 单个 DLL V 多个 DLL

    前段时间我在这里问了一个问题 当时我想知道是否最好将一个大项目 NET 类库 拆分为多个 NET DLL 建议使用一个大的 DLL 该 DLL 现在已在另一个项目中使用 另一个项目只使用了几个类 因此项目中有很多类未使用 从体系结构的角度来
  • 使用 DTO 和 BO

    我对 DTO BO 的疑问之一是何时传递 返回 DTO 以及何时传递 返回 BO 我的直觉告诉我始终将 NHibernate 映射到 DTO 而不是 BO 并且始终传递 返回 DTO 然后 每当我需要执行业务逻辑时 我都会将 DTO 转换为
  • MVC 与观察者模式

    我最近在 StackoverFlow 上问了一个关于 MVC 的问题 MVC设计模式 架构模式可以用于桌面应用程序开发吗 https stackoverflow com questions 305988 can the mvc design
  • 具体来说,什么属于模型、视图和控制器?

    我一直在学习模型 视图 控制器范例 MVC 但我很困惑 因为有些教程与其他教程相矛盾 我目前对这个过程的理解是这样的 路由器 调度器 前端控制器 尽管 MVC 名称中没有具体提及 但 Router 仍然是一个非常重要的部分 正是在这里 请求
  • Meyers 的单例实现实际上是如何实现单例的

    我读了很多关于单例的内容 什么时候应该使用它们 什么时候不应该使用它们 以及如何安全地实现它们 我正在用 C 11 编写 并且遇到了 Meyer 的单例延迟初始化实现 如所示这个问题 https stackoverflow com ques
  • C++11 的 &&(R 值引用)运算符是否废弃了“代理对象”设计模式?

    Scott Meyers 的第 30 项 更有效的 C http www amazon co uk More Effective Programs Professional Computing dp 020163371X绘制出 代理对象 编
  • 当代码依赖于两个对象的子类型时,是否有设计模式可以处理

    我会尽力尽可能明确 以防有比回答我的问题更好的解决方案 我正在使用 C 工作 我有一个报告模板 可以包含任意数量的打开的 功能 功能可能是信息表 饼图 条形图 列表等 我将报告生成为文本文件或 PDF 将来可能有其他选项 到目前为止我有一个
  • 这叫什么类型的建筑?

    对于我当前正在开发的 Web 应用程序 ASP NET MVC 我们采用以下架构 Data Access Layer 将数据持久保存到任意数据库的逻辑 Domain 数据模型 Service Layer 业务逻辑 例如订单处理 账户管理等
  • 策略模式的现实示例

    我一直在读关于OCP原理 http en wikipedia org wiki Open closed principle以及如何使用策略模式来实现这一目标 我打算尝试向几个人解释这一点 但我能想到的唯一例子是根据 订单 的状态使用不同的验
  • Javascript 中繁重计算的最佳实践?

    我正在处理客户端脚本 需要进行繁重的计算 例如将大量对象推送到数组中 这会导致 JavaScript 停止响应并且浏览器挂起并发出警报 是否有任何最佳实践或设计模式来处理这些计算 我搜索并找到许多不同的方法来处理这些情况 但解决方案很难实现
  • 就MVC模式而言,Struts 2中使用的Action是什么?

    在Struts2中 控制器将请求分派给Action Action将其传递给后端逻辑 这可以看作是一个非常大的过程 model 处理请求 JSP代表视图 Struts2中如何定义Action 肯定是not一个看法 是控制器还是模型 Strut
  • 为什么我收到错误“错误 C2259:...无法实例化抽象类”?

    任何帮助都是appriced 我正在研究 C 工厂模式 但收到此错误 1 gt c users brian documents visual studio 2010 projects cst276lab 3 guitar hpp 456 错
  • 使用 Doctrine2 时的多重歧视级别

    我正在使用 Doctrine2 来管理我的模型 如下 有一个抽象概念Content与复合模式Gallery 也是一个抽象概念Media从中Video and Image继承 我的选择是添加鉴别器Content and Media表以便区分G
  • 确定方法调用顺序的接口设计模式

    我想创建一个具有多种方法的 Java 接口 但我希望界面的用户只能按照我定义的顺序或顺序调用方法 例如buyTicket 不应在此之前调用reserveTicket 问 有没有设计模式或任何关于如何做到这一点的提示 我考虑过 A 接口被包装
  • 在关系数据库中存储树结构的已知方法有哪些? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Java API 中单例类的示例

    Java API 中单例设计模式的最佳示例有哪些 是个Runtime类单例 我只想到两个例子 java lang Runtime getRuntime http java sun com javase 6 docs api java lan
  • 服务作为 SOA 中的中介

    我知道什么是 通常的 中介设计模式 维基百科中有一些描述 http en wikipedia org wiki Mediator pattern http en wikipedia org wiki Mediator pattern 在我的
  • 可插入错误处理策略[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有服务对象 服务 A 它有一些特定的重复异步任务 该服务对象还有一个监督对象 服务B 我想处理与服务 A 中特定任务相关的大部分错误
  • 策略模式还是命令模式?

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

随机推荐