如果我在实现工厂模式时使用抽象类而不是接口。它仍然是工厂模式吗?

2024-04-18

例如 :http://www.tutorialspoint.com/design_pattern/factory_pattern.htm http://www.tutorialspoint.com/design_pattern/factory_pattern.htm

如果我更改抽象类 Shape 上的接口形状,请创建具体类来扩展 Shape 并使 Shape 工厂返回 Shape 抽象类类型对象。它仍然是工厂模式吗?


我会同意。

我们来看一下工厂方法模式的定义:

工厂方法模式是创造的该模式使用工厂方法来处理创建对象的问题,而无需指定将创建的对象的确切类

此模式背后的动机是将对象创建与使用该对象的客户端分开。客户端应该向工厂提供规范,但对象如何构建的详细信息由工厂抽象出来。

如果这是一个接口或抽象类,则是特定于情况的实现细节,只要您的工厂实现可以让您实现模式背后的动机。

如果以下任何陈述适用于您的情况,请考虑使用抽象类:

  • 您希望在几个密切相关的类之间共享代码。

  • 您期望扩展抽象类的类具有许多通用方法或字段,或者需要除 public 之外的访问修饰符(例如 protected 和 private)。

  • 您想要声明非静态或非最终字段。这使您能够定义可以访问和修改它们所属对象的状态的方法。

如果以下任何陈述适用于您的情况,请考虑使用接口:

  • 您期望不相关的类将实现您的接口。例如,Comparable 和 Cloneable 接口是由许多不相关的类实现的。

  • 您想要指定特定数据类型的行为,但不关心谁实现其行为。

  • 您想要利用类型的多重继承。

在某些实现中,对于工厂创建的产品使用抽象类而不是接口可能更有意义。如果所有产品之间存在共享的功能/行为集,那么将它们放入抽象基类中确实有意义。即使产品是由不同工厂制造的,这也适用。

归结为:您是否希望引入耦合以及引入耦合是否有意义 产品之间是否? 最终,客户将得到相同的结果——根据规范构建产品,并抽象出构造细节。

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

如果我在实现工厂模式时使用抽象类而不是接口。它仍然是工厂模式吗? 的相关文章

  • OpenJDK 11 问题 - 客户端在上次 UNWRAP 之前完成握手

    我正在将代码库从 Oracle Java 1 8 0 131 迁移到 OpenJDK 11 0 1 我们有实现 nio ssl 套接字通道的代码 在 Java 8 中 客户端 服务器握手工作正常 在 Java 11 中 客户端在解包来自服务
  • Java 1.4 上的 ActiveMQ 客户端

    我们在最新版本 5 6 0 中使用 Active MQ 现在我们遇到一个问题 必须连接一个新客户端 不幸的是这个客户端是用IBM JDK 1 4开发的 将 ActiveMQ 添加到应用程序会导致以下错误 UNEXPECTED ERROR O
  • 如何找出导致 poi 损坏 xlsx / xlsm 文件的原因

    我遇到的问题是 Apache POI 仅通过读取和写入就 损坏 了 xlsm xlsx 文件 例如使用以下代码 public class Snippet public static void main String args throws
  • setSize() 不起作用?

    我有一个程序 需要两个按钮 一个是常规按钮 另一个具有根据鼠标悬停而变化的图片 目前 由于图片很大 JButton自定义也很大 我可以更改自定义的大小并保持图像 和翻转图像 成比例吗 我尝试过 setSize 但它没有任何作用 对于任何反馈
  • Android 上 WebRTC 的自定义视频源

    Overview 我想使用自定义视频源通过 WebRTC Android 实现来直播视频 如果我理解正确的话 现有的实现仅支持 Android 手机上的前置和后置摄像头 以下类与此场景相关 Camera1Enumerator java ht
  • Struts ActionForm 属性应该是什么类型?

    我使用 Struts 1 2 4 继承了这个巨大的遗留 Java Web 应用程序 我有一个关于 ActionForms 的具体问题 其中一些仅具有字符串属性 即使对于数字 其中一些使用看似合适的类型 整数 日期 字符串等 这里的最佳实践是
  • 动态更新 LookAndFeel 值

    我希望能够动态更新 Swing GUI 的 LookAndFeel 属性 在本例中 我有一个简单的 Swing Awt 游戏 运行最初为 Nimbus 的游戏LookAndFeel 在启动后的各个时刻 我只想更改 比方说 一个细节 应用程序
  • 在 Spring Boot 异常处理期间保留自定义 MDC 属性

    简短版本 有足够的细节 如何保留添加在MDC中的属性doFilter 的方法javax servlet Filter执行 public void doFilter ServletRequest request ServletResponse
  • “传输协议线程失败” – “套接字为 EOF”,使用 Java 进行 J2SSH 连接

    我正在尝试通过我的 Java 代码建立 SSH 连接 但遇到异常 我通过 Putty Winscp 工具测试了我的连接 它工作正常 问题出在我的 Java 代码上 SEVERE The Transport Protocol thread f
  • Windows:如何获取所有可见窗口的列表?

    无论如何都要使用相关技术重新标记 我不知道它们是什么 稍后我可能会提出更详细的问题 关于具体细节 但现在我正在尝试掌握 大局 我正在寻找一种方法来枚举 Windows 上的 真实可见窗口 我所说的 真正可见的窗口 就是指 用户所说的 窗口
  • 从 API Explorer 调用 API 方法时不允许使用范围

    我在 Google App Engine 中有一个奇怪的行为 我正在使用 Eclipse 和 Java 进行开发 特别是使用 Google Cloud Endpoints 我使用以下设置创建了一个示例 API 实际上 我正在使用许多其他示波
  • AWS Lambda 和 S3 - 上传的 pdf 文件为空/损坏

    我有一个 Spring 应用程序 在 AWS Lambda 上运行 它获取文件并将其上传到 AWS S3 Spring控制器发送一个MultipartFile到我的方法 使用 Amazon API Gateway 将其上传到 AWS S3
  • 了解 Etc/GMT 时区

    Apple 在从 App Store 返回自动续订订阅收据时使用 Etc GMT 时区的理由是什么 Etc GMT 时区到底是什么 Java SDK 能理解这个时区吗 或者我是否必须使用其他第三方库 例如乔达时间 http www joda
  • 如何在 JUnit 中缩短(或隐藏)包名称?

    我在 JUnit 中有很长的包名称 这使得很难看到正在运行哪些测试 不幸的是 使用 Eclipse 的 缩写包名称 不起作用 有没有办法隐藏或者最好缩短它们 None
  • CTRL-C 在 Python 中的行为有所不同

    I ve recently started learning Python long time Java programmer here and currently in the process of writing some simple
  • 优化两个三位数乘积的最大回文数?

    我正在研究一个面试问题 我被问到这个问题 我应该编写一个程序 从两个三位数的乘积中找到最大的回文数 这里是question https projecteuler net problem 4 我想出了这种从底部开始的蛮力方法 public c
  • Hibernate - 如何通过 Hibernate 将 java.net.URL 存储到数据库中

    我有一块田地URL countryURL in a Country班级 我想将其数据存储到COUNTRY通过 Hibernate 将表存储在数据库中 哪个休眠type我应该在休眠映射文件中使用
  • 根据另一个列表的顺序对列表进行排序[重复]

    这个问题在这里已经有答案了 我需要对列表进行排序Person对象 List
  • 异步方法的同步版本

    在 Java 中创建异步方法的同步版本的最佳方法是什么 假设您有一个包含这两种方法的类 asyncDoSomething Starts an asynchronous task onFinishDoSomething Called when
  • 运行外部进程的非阻塞线程

    我创建了一个 Java GUI 应用程序 它充当许多低级外部进程的包装器 该实用程序按原样运行 但迫切需要一项重大改进 我希望我的外部进程以非阻塞方式运行 这将允许我并行服务其他请求 简而言之 我希望能够在生成数据时处理来自外部进程的数据

随机推荐

  • 如何使用 JavaScript 获取文件扩展名?

    参见代码 var file1 50 xsl var file2 30 doc getFileExtension file1 returns xsl getFileExtension file2 returns doc function ge
  • 将 Iso8601TimeSpanConverter 添加到 JsonConverter 列表会引发 ArrayTypeMismatch 异常

    我正在使用 AutoRest 从 Swagger 定义文件自动生成 REST API 的 C 类 问题在于 当执行客户端类的initialize方法时 会抛出ArrayTypeMismatchException 代码如下 Serializa
  • Gunicorn 日志配置 access_log_format

    我希望 Gunicorn 在我的 docker 容器中记录 JSON 我想在配置文件中使用 access logformat 尝试添加format or access log format or access logformat不配置记录器
  • 将 Mercurial 存储库转换为 svn 存储库

    我知道你可以将 svn 存储库转换为 Mercurial 存储库 或使用 Mercurial 作为 svn 存储库的客户端 但我想要的是将 Mercurial 存储库转换为 svn 存储库 我们有一些使用 SVNKit 的工具 我们想继续使
  • 如何在android中将AutoCompleteTextView与RecyclerView.Adapter一起使用但不与ArrayAdapter一起使用

    我有一个需要实施自动建议的情况 为此 我一直在尝试使用自定义的 RecyclerView Adapter 但问题是 AutoCompleteTextView 似乎是为 BaseAdapter 及其子类制作的 因此 适配器不被接受 还有其他方
  • Asp.net Web API - 从actionfilter返回数据

    我想从 Web api 操作过滤器返回一个 json 对象 我怎样才能实现这个目标 我可以从操作返回对象 但我需要在某些条件下从操作过滤器返回一些数据 提前致谢 编辑 1 当我更改如下代码时 浏览器仍在加载而没有任何响应 并以超时错误结束
  • 验证用户输入/为 .NET 控件提供状态 OK 或 NOK

    我正在考虑验证用户输入的最佳方法 让我们想象一下一些文本框 复选框或您喜欢的任何 NET 控件 其中必须将用户输入验证为 OK 或 NOK 一旦用户填写了所有必填字段 他就通过按钮提交 现在我必须知道哪些字段之前被确认为 OK 哪些字段被确
  • ReactJS - 如何让 onFocus 和 onBlur 工作

    据我了解 onFocus单击输入框时应调用 并且onBlur当其他事情成为焦点时应该调用 我的意图 我想调用一个函数 当通过单击激活时 它将 concat焦点输入框的消息字符串 但我无法获取onFocus or onBlur上班 从我周围搜
  • 通过按键和scrollTo插件向下滚动到下一个元素 - jQuery

    我正在使用 jQuery 的scrollTo http flesler blogspot com 2007 10 jqueryscrollto html插件使用向上箭头和向下箭头向上和向下滚动我的页面 我有一堆带有 screen 类的 di
  • 如何使用 Eclipse 的 google 插件使用经过精心编译的 HTML 来部署 GWT 应用程序

    我使用 eclipse 的 google 插件来部署我的 GWT 应用程序 到目前为止它运行良好 部署操作首先使用 混淆 输出样式编译我的 GWT 项目 现在我希望它更改为 漂亮 因为我必须调试客户端在运行中 我只是看不到混淆的堆栈 Tha
  • PHP MySQLi 权限被拒绝,但可以从 MySQL CLI 运行

    我收到错误 Failed to connect to MySQL Permission denied 当从 PHP 与 MySQL MySQLi 和 PDO 连接到远程 MySQL 主机时 但是 如果我从同一主机在命令行上使用相同的凭据通过
  • Android - StaggeredGrid错误项目处理

    我的 Recycler 视图和 StaggeredGrid 有问题 它将宽度减少了 2 我使用 Picasso 将图像加载到项目中 当我第一次加载图像时 它们在回收器视图中的处理方式很奇怪 重新加载后 一切似乎都很好 我认为问题来自图像加载
  • 调用 sdp_record_register() 时出现分段错误

    我正在尝试使用 BlueZ 在 SDP 中注册我的蓝牙服务 我跟随this http people csail mit edu albert bluez intro x604 html教程 代码编译成功 但当我运行它时 出现分段错误 即使是
  • 如何从 d3 导入子模块以轻松创建图例?

    我对 JavaScript 和 D3 比较陌生 所以请记住这一点 我创建了一个可视化来显示仓库中特定位置的访问频率 并希望使用连续色标添加图例 我看过几个街区 可能会想出一些离题的东西 但是我遇到了this https observable
  • /usr/local/lib 中未找到共享库

    我不明白 我通常安装第三方软件 usr 本地因此库被安装到 usr local lib 中并且链接到这些库从来没有出现问题 但现在它突然不再起作用 gcc lkaytils o test test c usr bin ld gold rea
  • Django 和通用访问卡 (CAC)

    计划用 Python 编写 Web 应用程序 Django 是框架的领先竞争者 一项要求是 CAC 访问 无需手动输入用户名和密码 据我所知 CAC 访问不是 Django 包含的 电池 的一部分 作为一个整体框架 不一定是坏属性 Djan
  • 具有内边缘的 SpriteKit SKPhysicsBody

    我创建了一个SKSpriteNode比如说Map它有一个我定义的边缘路径 一些简单的多边形形状 我想弄清楚的是如何添加几个other将充当内部边缘的边缘路径Map 就好像整个 地图 实际上确实有holes 某种内部边界形状可以与Map整体
  • 计算结构向量中的匹配项

    我有一个问题 要求我计算该数组中使用以下任一方法的实例的数量std count or std find 我知道如何使用标准数据 参见底部代码 类型来执行此操作 但不知道如何使用NameContainer我正在使用的 Type struct
  • Firebase 更新 apple-app-site-association

    我正在实现动态链接 一切正常 除了在我的项目设置中我更改了 团队 ID 又名 AppStore 应用程序前缀 如果我访问myproject page link apple app site association它仍然给我旧的团队 ID 我
  • 如果我在实现工厂模式时使用抽象类而不是接口。它仍然是工厂模式吗?

    例如 http www tutorialspoint com design pattern factory pattern htm http www tutorialspoint com design pattern factory pat