如果这 3 个类别都遵循 SOLID 概念

2024-01-01

我想向您询问有关以下 SOLID 代码的更多信息。如果这三个类都遵循 SOLID 概念。

public interface A {
    public void calculate(String a);
}

public class B implements A {
    @Override
    public void calculate(String b) {
        System.out.println("value: " + b);
    }
}

public class C {

    private A a;

    public void show() {
        a = new B();
        a.calculate("test");
    }

}

从我看待事物的角度来看,

C类打破了

单一责任原则通过处理两个职责,即实例化其他对象(B 的实例)和show功能,无论是什么。对象创建应该由单独的类处理,并且依赖项应该注入给用户。

开闭原则通过与 B 紧密耦合,而它可能依赖于接口 A,因此可以通过使用 A 的另一个实现来进行扩展。参见this https://en.wikipedia.org/wiki/Open/closed_principle#Polymorphic_open.2Fclosed_principle了解更多信息。换句话说,C 应该使用 A,而实际的实现应该注入到 C 中。

以下是如何将 C 编写为 SOLID。

class C {
    private A a;

    public C(A a) {
        super();
        this.a = a;
    }

    public void show() {
        a.calculate("test");
    }

}

class Creator {
    C createC() {
        A b = new B();
        return new C(b);
    }
}

Creator可以用像Spring这样的依赖注入框架来代替。

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

如果这 3 个类别都遵循 SOLID 概念 的相关文章

随机推荐

  • XSLT 选择具有命名空间的节点

    我正在尝试使用 xslt 从 xml 中获取几个标签的值 我的列表 xml a a
  • 在 SQL Server 2012 中使用 TO_DATE

    我有个问题 当我在 SQL Server 2012 中执行此 SQL 语句时 TO DATE 2011 11 09 00 00 00 YYYY MM DD HH24 MI SS 我收到错误 TO DATE 不是函数集成可识别的名称 解决办法
  • mongodb 等待连接

    我下载了 mongodb 4 4 创建了一个data db我的文件夹里面C 驱动器 然后我从 bin 文件夹运行 mongod 然后打开另一个 cmd 导航到 bin 文件夹 然后输入命令mongo 平常的东西 问题是 即使这样做之后 我仍
  • 在 has_many :through 关系中添加和删除

    从 Rails 关联指南中 他们使用 has many through 演示了多对多关系 如下所示 class Physician lt ActiveRecord Base has many appointments has many pa
  • JSF 2.0 h:ui 内的 inputText:repeat

    我应该如何更改以下示例 在提交 commandButton 后 更改 inputText 中的值不会消失 我明白为什么会发生这种情况 但我不知道如何解决
  • ASP.NET 应用程序中需要定时炸弹

    我们开发了一个定制的 ASP NET 应用程序 供在客户的 Intranet 上使用 看来他们不太可能为此付出代价 所以我们的老板希望我们引入一个定时炸弹 编辑 请仅提供技术答复 这是否是一个好 或合法 想法是 CEOoverflow co
  • .aspx 与 .ashx 主要区别

    aspx 和 ashx 页面之间有什么区别 当我需要处理从代码调用并返回响应的请求时 我现在使用 ashx 但我想要一个更技术性的答案 Page是一个特殊的案件处理者 通用 Web 处理程序 ashx 基于扩展的处理器 是所有没有 UI 且
  • 如何仅显示带有facet的极地ggplot的部分绘图区域?

    假设有一个极坐标数据集要绘制为扇形 library ggplot2 library reshape2 data lt melt matrix rnorm 1000 nrow 20 data type lt 1 2 data Var1 lt
  • 适用于 Android 的商业 IDE+模拟器?

    我是一个 Android 新手 但在过去的几周里 我在 2 台 PC 上安装了 JDK Eclipse Android SDK 两次安装都花了一天的时间进行调整和处理配置问题 并使不同的部分一起发挥作用 通常都是 PITA 在一台电脑上 我
  • 按超出范围的索引分配值到列表[重复]

    这个问题在这里已经有答案了 mylist a apple b ball c cat mylist 6 value print mylist Error IndexError list assignment index out of rang
  • Chainlink-以“bytes32”形式获取 API 时出现问题

    我一直在学习 chainlink API 并尝试修改example https docs chain link docs advanced tutorial 从 Chainlin 的文档中获取byets32来自 API 的值 该示例的原始代
  • C++ 优化矩阵乘法微内核中的 L1 缓存使用

    我的任务是实现一个优化的矩阵乘法微内核 用于计算C A B在 C 中 从以下代码片段开始 我遇到了一些违反直觉的行为 我需要一些帮助来更好地理解正在发生的事情 void mat mul double A double B double C
  • 关于服务和存储库的领域驱动设计问题

    我有两个实体用户和课程 用户可以参加多门课程 这使得关系成为一对多 但一门课程可以由许多学生选修 因此它具有多对多的关系 现在 我需要为用户注册课程 我的用户实体有 public void AddCourse Course course i
  • 系统托盘访问

    有没有办法 在 C 中 访问系统托盘 我不是在谈论制作通知图标 我想迭代托盘中的项目 我会猜测整个过程 但我不知道如何确定托盘中实际有什么 什么只是一个过程 并且还用我自己的图标来表示这些项目用户界面 您对 Win32 互操作有何看法 我发
  • 如何在 RDLC 中删除时间并仅显示日期

    我使用的是 Winform C 和 RDLC MySQL 我尝试仅在 Tablex 中显示日期 但这种日期格式也有时间 如何去掉时间 我的表情是 Fields date Value 请参阅下面我的报告 提前致谢 我在表达式中尝试了 Fiel
  • 找出给定页面上使用的 CSS 样式

    我有一个包含多个样式表的页面 其中的大部分样式实际上并未在页面中使用 已弃用等 我想导出新的样式表包含页面上实际使用的所有样式 有办法做到这一点吗 我也遇到了同样的问题 由于我需要分析的页面是仅登录的 并且是为了工作 所以我无法向外部应用程
  • 使用 swift 复制文件

    我正在使用此代码复制文件数据库 try fileManager copyItem atPath storeURL path toPath storeCopyURL path 我可以看到创建了一个新的 sqlite 数据库 后来 当我尝试使用
  • Maven 找不到依赖项 [dependencyResolutionException]

    我向我的项目添加了 Maven 依赖项 并且我的项目在本地编译 但不在服务器上编译 它无法解析新添加的依赖项 这是我的 pom xml 文件
  • Java 和 JavaScript 之间使用 OAEP 进行 RSA 加密

    我正在尝试在 JavaScript 中加密一个短字符串并在 Java 中解密 解密失败 我认为这是因为两个平台之间的块模式和 或填充不同 我尝试在Java和JavaScript中加密相同的字符串 并得到不同的结果 这表明确实存在差异 下面是
  • 如果这 3 个类别都遵循 SOLID 概念

    我想向您询问有关以下 SOLID 代码的更多信息 如果这三个类都遵循 SOLID 概念 public interface A public void calculate String a public class B implements