如何实现有效的 Java 特征?

2024-04-30

请告诉我这是否不合适(特别是 Programmers.SE 或其他东西是否更适合这个问题。)

好吧。因此,我目前将许多“特征”表达为接口。我们称它们为“可更新”和“可破坏”。将它们表达为接口的缺点是我无法在所有“可破坏”组件之间共享行为;另一方面,将它们表示为抽象类意味着如果没有将混合特征显式定义为另一个抽象类(“UpdateableAndDestructible”),我就无法混合和匹配,而且这感觉像是滥用抽象类功能。然而,如果没有更干净的方法来处理这个问题,这可能就是我最终要做的事情。

对于这个难题的纯 Java 解决方案我有哪些选择?我是否可以描述共享行为,然后根据我认为合适的方式进行混合和匹配,而不必明确描述我将使用的每个排列?


也许您可以通过使用接口和默认实现的组合来实现目标。

Like:

public interface Updatable {
  void updated();
}

public interface Loadable {
  void load();
}

public class DefaultUpdatable implements Updatable {
 ...
}

public class DefaultLoadable implements Loadable {
 ...
}

public class SomeObject implements Updatable, Loadable {
  private final Updatable updatable = new DefaultUpdatable();
  private final Loadable loadable = new DefaultLoadable();

  public void load() {
    this.loadable.load();
  }

  public void updated() {
    this.updatable.updated();
  }
}

仍然很吵,也许没有你想要的那么灵活,但也许比执行 UpdatableAndDestructable 更干净一些。

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

如何实现有效的 Java 特征? 的相关文章

随机推荐

  • 阅读器关闭时调用元数据的尝试无效?

    我正在数据读取器上运行 if else 语句来查询表数据并激活 取消激活页面上的某些控件 我实现了一个 using 语句来在关闭块时自动关闭连接和阅读器 但我仍然在每个 if else 语句上收到阅读器已关闭错误 少了什么东西 代码如下 s
  • 如何更改每种语言的 vim 设置?

    我将 vim 与许多不同的语言 C C Java shell 等 一起使用 我知道 vim 已经为每种语言预设了设置 但我想根据我个人的喜好更改每种语言的设置 我已经有一个带有设置的 vimrc 文件 但我想要更多文件来根据我使用的语言声明
  • Dropzone 的“勾号”标记没有显示?

    I have been using dropzone to upload the image file on my localhost Everything is working fine file is being uploaded an
  • 当新版本的 pod 可用时,“pod update”会覆盖我的代码更改吗?

    我已使用 cocoapods 将 MKStoreKit 版本 4 99 添加到我的项目中 我的 Podfile 包含 platform ios 6 0 pod MKStoreKit gt 4 99 MKStoreKit 有一个名为 MKSt
  • 当我运行 C# 参数化查询时,它超时。具有硬编码参数的相同查询工作正常

    我想获取文本列包含字符串过滤器的所有 ID 当我运行此参数化查询时 它超时 SqlCommand cmd new SqlCommand SELECT ID FROM TableName WHERE Text LIKE filter conn
  • 下面的代码是如何工作的?

    众所周知 cout 在 VS2010 中是无缓冲的 参见 Stephan Lavavej 的帖子 here http connect microsoft com VisualStudio feedback details 642876 st
  • 是否可以将 RSA Archer 与多个 Active Directory 集成?

    是否可以将 RSA Archer 与多个 Active Directory 集成 一切皆有可能 只是你愿意付出多少努力 Option 1 推荐 RSA Archer v5 x 支持多种 LDAP 同步配置 因此 您可以拥有多个 AD 服务器
  • 使用 python 登录 Instagram 时出错

    我正在尝试使用 argparse 通过 python 脚本登录我的 Instagram 似乎已连接 但打印出 无法加载该页面 如果您的浏览器禁用了 cookie 或者您正在以私人模式浏览 请尝试启用 cookie 或关闭私人模式 然后重试您
  • 有没有办法让特定的 div 忽略它的父 div 的位置?

    我有一个 div 其位置因其包含的 div 的相对定位而偏离 虽然删除父级的相对定位可以解决问题 但我们宁愿不将其作为解决方案来实现 因为它可能会破坏其他内容 有没有办法强迫孩子忽略父母的定位 不幸的是 没有办法让一个元素通过 CSS 动态
  • 合并来自 ffmpeg 的两个视频

    我想使用 ffmpeg 将两个 mp4 视频组合成一个 mp4 视频 到目前为止我尝试过的是 ffmpeg i input1 mp4 i input2 mp4 output mp4 但是 每次我获取带有第一个输入的视频编解码器的视频而不是另
  • iPhone X - 设置主页指示器周围区域的颜色

    当我尝试将工作表与 iPhone X 的安全区域对齐时 我对 Xcode 还很陌生 它在工作表下方留下了一个透明区域 有没有办法设置该区域的填充而不扩展纸张或在安全区域之外对齐 这是我的小扩展 如果有人可以建议改进以不通过 幻数 标签访问添
  • 如何找到与一个变量中的最大值相对应的所有变量的最大值?

    我有一个包含许多变量的每日数据 xarray 我想提取最大q routed每年及最大当日其他变量的对应值q routed发生
  • 什么是 NullPointerException,如何修复它?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 什么是空指针异常 java lang NullPointerException 以及是什
  • 了解 C++0x lambda 捕获

    在最近的一份 C 0x 草案 n3225 pdf 中 我们可以找到 5 1 2 10 使用非限定名称查找的常用规则来查找捕获列表中的标识符 3 4 1 每个此类查找都应找到在本地 lambda 表达式的到达范围中声明的具有自动存储持续时间的
  • 如何查询 USB Root Hub 中未列出的 USB 设备

    查询适用于在以下位置找到的某些设备Win32 USBHub SELECT FROM Win32 USBHub WHERE DeviceID 0 这是代码上下文 Check if USB device is plugged in string
  • 如何在 Mongoose 中使用正则表达式查找项目[重复]

    这个问题在这里已经有答案了 在 Mongoose 文档中我没有找到等效的 regex https docs mongodb com manual reference operator query regex MongoDb 的 你能提供一个
  • 使用 KDE Kirigami 时未找到 QML 模块

    所以我决定在我的应用程序中使用 KDE Kirigami UI 框架 所以我按照说明进行操作here https api kde org frameworks kirigami html index html 我将存储库克隆到我的应用程序目
  • 另一个 MinGW“gcc:错误:CreateProcess:没有这样的文件或目录”

    我已经通过 GUI 安装程序在 Windows 8 64 位 中安装了 MinGW C 编译器 但是当我尝试编译 C 程序时 gcc 说 gcc CreateProcess 没有这样的文件或目录 这是一个常见的错误 我已经尝试了我找到的所有
  • 查找数组中的 K 个最小值(堆 vs QuickSelect)

    假设我们有一个数组 我们希望找到它的 K 个最小值 有两种方法 1 使用快速选择算法 O n 时间复杂度和O 1 空间 2 使用最小堆数据结构 O NlogK 时间复杂度和O K 空间 我想知道什么时候一个比另一个更受青睐 我想这两个都可以
  • 如何实现有效的 Java 特征?

    请告诉我这是否不合适 特别是 Programmers SE 或其他东西是否更适合这个问题 好吧 因此 我目前将许多 特征 表达为接口 我们称它们为 可更新 和 可破坏 将它们表达为接口的缺点是我无法在所有 可破坏 组件之间共享行为 另一方面