为什么抽象工厂使用抽象类而不是接口?

2023-11-26

我正在学习设计模式,书中的第一个例子是关于抽象工厂的。 我已经在 VS 中构建了练习,一切看起来都不错,但有一个问题我想知道。

书中工厂类的实现是这样的:

public abstract class AbstractVehicleFactory
{
    public abstract IBody CreateBody();
    public abstract IChassis CreateChassis();
    public abstract IGlassware CreateGlassware();
}

完成练习后,我注意到上面的类可以用以下代码替换:

public interface IAbstractVehicleFactory
{
      IBody CreateBody();
      IChassis CreateChassis();
      IGlassware CreateGlassware();
}

当然,这两个示例的功能完全相同,但我想知道使用抽象类而不是接口的原因是什么?


“摘要”中“抽象工厂”与“抽象”无关abstract class。抽象工厂是具体工厂的“基础”,但设计模式本身并不强制执行任何特定的实现。抽象工厂可以是抽象的,甚至可以是具体的类、接口或某种形式的鸭子类型对象,具体取决于您使用的语言。

确实在 C# 中interface是指定抽象工厂的非常合理的方式。

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

为什么抽象工厂使用抽象类而不是接口? 的相关文章

  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • 随着时间的推移,添加到 List 变得非常慢

    我正在解析一个大约有 1000 行的 html 表 我从一个字符串中添加 10 个字符串 td 每行到一个list td
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • 使用 C# 中的 CsvHelper 将不同文化的 csv 解析为十进制

    C 中 CsvHelper 解析小数的问题 我创建了一个从 byte 而不是文件获取 csv 文件的类 并且它工作正常 public static List
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • 结构体的内存大小不同?

    为什么第一种情况不是12 测试环境 最新版本的 gcc 和 clang 64 位 Linux struct desc int parts int nr sizeof desc Output 16 struct desc int parts
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使

随机推荐

  • 如何用纯C优雅地实现一系列不同类型版本的功能?

    我想编写几个仅参数类型不同的函数 我知道 C 有template很好地处理这个问题 虽然还不是很好 很少有编译器支持export关键字 并且查询该关键字是为了提高效率 举个简单的例子 我想要 template
  • 为什么我不应该将所有仅 PL/SQL 的 VARCHAR2 设为 32767 字节?

    或者我应该 标题的灵感来自于加里 迈尔斯 Gary Myers 在为什么 Oracle varchar2 有一个强制大小作为定义参数 考虑以下变量 declare database table column interfacing vari
  • 如何在 VB 和 C# 中从文件加载字体?

    我想从文件加载字体到我的 VB Form 程序中 例如 我的字体位于 exe 程序的同一文件夹中 我希望它保留为外部资源 我们可以替换该资源 以便它更改整个程序的字体 以下是如何在 C 中执行此操作的示例 System Drawing Te
  • 测试 Android IAP/应用内购买订阅

    我正在实现几个要在 Google Play 上启动的 Android 应用程序 它们都使用 Google IAP 自动续订订阅产品类型进行订阅 为了测试该应用程序 我执行了以下操作 已将二进制草案上传到 Google Play 但未发布 在
  • 具有 bash 可编程补全功能的条件尾随空格

    我正在创建一个函数来为我使用的命令提供可编程完成 在来自http www debian administration org articles 317 shell脚本的用法如下 script sh command command optio
  • JSON 中的反序列化和序列化是什么?

    我见过 JSON 中的术语 反序列化 和 序列化 他们的意思是什么 JSON 是一种对字符串中的对象进行编码的格式 序列化表示将对象转换为该字符串 and 反序列化是它的逆操作 转换字符串 gt 对象 当传输数据或将数据存储在文件中时 要求
  • 如何将 .exe 文件转换为 Windows 安装向导

    我正在通过 Tkinter 创建一个应用程序 制作完成后 我使用 pyinstaller 转换为 exe 文件 这很好 但我想让它更专业 就像我们从互联网下载任何应用程序并打开它一样 它会打开一个安装向导 其中包含许可协议以及所有文件的放置
  • 在 Mac OS X 编程时,是否有与 viewDidLoad 等效的方法? [复制]

    这个问题在这里已经有答案了 可能的重复 NSViewController 中的 viewDidLoad 我开始开发 iOS 应用程序 现在转向 Mac OS X 应用程序 我想知道 Mac OS X 中是否有类似 iOS 的 viewDid
  • ASP Classic 中的 If Not IsNull

    我对 asp 还很陌生 并且遇到了语法错误 如果可以的话 我希望得到帮助 我有一个 ASP 页面 显示一个从 sql 中提取数据的表 大部分数据尚未填充 因此返回 NULL 有问题的数据类型是数字 我需要FormatNumber the r
  • 如何在 Smalltalk 中在运行时向类添加方法?

    我正在为基于 XML 的 Web 服务构建 Smalltalk API XML 服务非常常规 我想我应该重写这些方法 而不是手动编写方法 doesNotUnderstand 通过动态添加方法MyApi class gt gt compile
  • Java 在一个语句中使用两个等号? [复制]

    这个问题在这里已经有答案了 有人可以帮助我理解以下代码的作用以及带有两个等号的行的作用吗 在这个构造函数中 某物等于某物等于某物如何工作 public More LinkedList header next header previous
  • 使用 Webpack、Jasmine (-core)、typescript 进行单元测试

    我有一个项目 它使用 webpack 将所有代码捆绑到一个文件中 该项目正在使用 Typescript 目前运行良好 我已经添加了单元测试 茉莉花似乎是前进的方式 众多方式之一 它实际上包含在 package json 中的 jasmine
  • ASP.Net 5 类库包中的 EntityFramework 命令?

    我正在尝试开发我的第一个 ASP Net Web 应用程序 在我的解决方案中我有两个项目 AWeb Application and Class Library Package 当我构建此应用程序的 ASP Net 4 5 版本时 我将Ent
  • 找到小于x的最大素数的算法[关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 如何计算小于 x 的最大素数 事实上 它不必是精确的 只需近似且接近 x 即可 x 是一
  • 正则表达式匹配仅包含某些字符的整个单词

    我想匹配仅包含定义字符的整个单词 或真正的字符串 例如 如果字母是d o g dog match god match ogd match dogs no match because the string also has an s whic
  • 调整仪表板中整个标题栏的高度闪亮仪表板中的标题

    我看到这里有一个类似的问题 调整闪亮仪表板中仪表板标题的高度 但我没有资格对给定的答案发表评论 这个答案给出的解决方案将在我想扩大标题大小的情况下起作用 然而 当我将尺寸减小到 20 像素时 这只改变了标题的标题部分的高度 我想减小闪亮仪表
  • 如何使用Python抓取谷歌地图

    我正在尝试使用 python 从谷歌地图中抓取某个地方的评论数量 例如 Pike s Landing 餐厅 参见下面的谷歌地图 URL 有 162 条评论 我想在 python 中提取这个数字 URL https www google co
  • AudioManager 中的 setSpeakerphoneOn 不会更改 Android 12 上的扬声器值,它始终保持 false。为什么?

    fun toggleSpeaker context Context isSpeakerPhoneSelected value let val audioManager AudioManager context getSystemServic
  • 如何为 Spark Streaming 定义 Kafka(数据源)依赖项?

    我正在尝试使用 Spark streaming2 0 0 使用 kafka 0 8 主题 我正在尝试确定所需的依赖项 我已尝试在 build sbt 文件中使用这些依赖项 libraryDependencies org apache spa
  • 为什么抽象工厂使用抽象类而不是接口?

    我正在学习设计模式 书中的第一个例子是关于抽象工厂的 我已经在 VS 中构建了练习 一切看起来都不错 但有一个问题我想知道 书中工厂类的实现是这样的 public abstract class AbstractVehicleFactory