朝着理想坚实迈进_坚实原则:单一责任原则

朝着理想坚实迈进

单一责任原则是首字母缩写词的第一原则。

“班级应该只有一个改变的理由。”

每个模块或类都应对软件提供的功能的单个部分负责,并且该责任应由类完全封装。

例如,想象一下导航软件的场景。
我们根据给定的方向(北,南,西,东)改变了位置。

Position类包含有关x和y轴位置的值。

package com.gkatzioura.solid.single;public class Position {private Integer xAxis;private Integer yAxis;public Position(Integer xAxis, Integer yAxis) {this.xAxis = xAxis;this.yAxis = yAxis;}public Integer getxAxis() {return xAxis;}public void setxAxis(Integer xAxis) {this.xAxis = xAxis;}public Integer getyAxis() {return yAxis;}public void setyAxis(Integer yAxis) {this.yAxis = yAxis;}
}

这个方向是一个枚举,代表朝北,向东,向南和向西的方向。

package com.gkatzioura.solid.single;public enum Direction {N,W,S,E
}

最后有一个Navigator类,负责根据方向和位置的变化进行导航。

public class Navigator {public Position navigate(Position position, Direction direction) {....}}

为了正确导航,导航器应根据方向确定下一个位置。 同样,导航器应在值小于0的情况下固定位置。

public class Navigator {public Position navigate(Position position, Direction direction) {Position nextPosition = resolve(position,direction);Position fixedPosition =fix(nextPosition);return fixedPosition;}public Position resolve(Position position,Direction direction) {switch (direction) {case N:return new Position(position.getxAxis(),position.getyAxis()+1);case S:return new Position(position.getxAxis(),position.getyAxis()-1);case W:return new Position(position.getxAxis()-1,position.getyAxis());case E:return new Position(position.getxAxis()+1,position.getyAxis());default:throw new IllegalArgumentException();}}public Position fix(Position position) {return new Position(position.getxAxis()<0?0:position.getxAxis(),position.getyAxis()<0?0:position.getyAxis());}}

这种方法的问题在于,如果位置有效性标准发生更改,我们必须更改Navigator类。 位置移动机构变更的情况也相同。 导航器不仅要导航,还要解决下一个位置并确定新位置。

不违反单一职责原则的方法是创建一个将解决下一个职位的类,并负责确定新职位。

NextPositionResolver类将根据给定的方向解析下一个位置。

package com.gkatzioura.solid.single;public class NextPositionResolver {public Position resolve(Position position,Direction direction) {switch (direction) {case N:return new Position(position.getxAxis(),position.getyAxis()+1);case S:return new Position(position.getxAxis(),position.getyAxis()-1);case W:return new Position(position.getxAxis()-1,position.getyAxis());case E:return new Position(position.getxAxis()+1,position.getyAxis());default:throw new IllegalArgumentException();}}}

如果无效的x或y值,PositionRepairer类将固定位置。

package com.gkatzioura.solid.single;public class PositionRepairer {public Position fix(Position position) {return new Position(position.getxAxis()<0?0:position.getxAxis(),position.getyAxis()<0?0:position.getyAxis());}}

Navigator类将具有NextPositionResolver和PositionRepairer类作为依赖项,以便正确执行导航。

package com.gkatzioura.solid.single;public class Navigator {private NextPositionResolver nextPositionResolver;private PositionRepairer positionRepairer;public Navigator(NextPositionResolver nextStepResolver,PositionRepairer positionRepairer) {this.nextPositionResolver = nextStepResolver;this.positionRepairer = positionRepairer;}public Position navigate(Position position, Direction direction) {Position nextPosition =  nextPositionResolver.resolve(position,direction);Position fixedPosition = positionRepairer.fix(nextPosition);return fixedPosition;}}

您可以在github上找到源代码。 下一个原则是开放/封闭原则。

另外,我还编写了备忘单,其中包含有关扎实原则的摘要。
在链接中注册以接收它。

翻译自: https://www.javacodegeeks.com/2018/02/solid-principles-single-responsibility-principle.html

朝着理想坚实迈进

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/333617.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是代数数

代数数是代数与数论中的重要概念&#xff0c;指任何整系数多项式的复根。 所有代数数的集合构成一个域&#xff0c;称为代数数域。 不是代数数的数称为超越数&#xff0c;例如&#xff1a;圆周率 π、自然对数的底数 e。

oracle 容器运行_Oracle应用容器云的自由

oracle 容器运行在这篇博客文章中&#xff0c;我将介绍如何部署CloudEE封装在杜克大学应用自由尤伯杯罐子Oracle应用集装箱云端 。 在Oracle Application Container Cloud中进行部署所需的部署工件是一个ZIP归档文件&#xff0c;其中包含应用程序ber-jar和清单文件&#xff08…

为什么SpringBoot如此受欢迎?如何有效地学习SpringBoot?

SpringBoot是最流行和使用最广泛的Java框架。 有时&#xff0c;这种讨论“为什么SpringBoot如此受欢迎&#xff1f;” 来我和我的朋友/同事之间。 另外&#xff0c;我确实收到了许多人发来的电子邮件&#xff0c;询问“春天是巨大的&#xff0c;如何快速学习它&#xff1f;” 。…

树莓派python交互界面实例_玩转树莓派-RaspBerry,使用Python开发定制界面

1 准备SD卡8G以上&#xff0c;16G更佳。编译过程中&#xff0c;会耗用大量存储空间。一定在编译之前运行sudo raspi-config&#xff0c;选择expand file system扩展SD卡的分区。如果空间不够&#xff0c;会导致运行挂起。使用df -h可查看存储卡的可用容量。2 更新资源的索引清单…

什么是无理数

无理数”就是不能精确表示为两个整数之比的数&#xff0c;而并非没有道理。 无理数&#xff0c;也称为无限不循环小数&#xff0c;不能写作两整数之比。若将它写成小数形式&#xff0c;小数点之后的数字有无限多个&#xff0c;并且不会循环。 常见的无理数有非完全平方数的平方…

java依赖_java 依赖、组合、聚合与继承

java中类与类之间的关系大部分的初学者只知道java中两个类之间可以是继承与被继承的关系&#xff0c;可是事实上&#xff0c;类之间的关系大体上存在五种—继承(实现)、依赖、关联、聚合、组合。接下来&#xff0c;简单的分析一下这些关系。继承(实现)对于类来说&#xff0c;这…

获取 RPM 包常用站点

获取需要的 RPM 包常用站点&#xff1a; http://mirrors.sohu.com http://rpmfind.net http://rpm.pbone.net/

java 多线程和并行编程_Java 8中的并行和异步编程

java 多线程和并行编程并行代码是在多个线程上运行的代码&#xff0c;曾经是许多经验丰富的开发人员的噩梦&#xff0c;但是Java 8带来了许多更改&#xff0c;这些更改应该使这种提高性能的窍门更加易于管理。 并行流 在Java 8之前&#xff0c;并行&#xff08;或并发&#xf…

java bi报表工具_7款顶级开源BI(商务智能)软件和报表工具

在这个信息化时代&#xff0c;每分每秒都产生海量数据。在海量数据中&#xff0c;挖掘出有用的数据&#xff0c;并且能以较人性化、直观的方式展示这些数据&#xff0c;变得尤为重要。本文将介绍 7款顶级开源 BI(商务智能)软件和报表工具&#xff0c;用于商业数据的分析处理&am…

Linux命令之 DNF -- 新一代的 RPM 软件包管理器

文章目录一、命令介绍二、安装 DNF三、DNF 命令&#xff08;一&#xff09;主要命令1. 安装、升级和删除软件包2. 查询和检查软件包3. 执行其它功能&#xff08;二&#xff09;插件命令四、选项参数五、命令示例&#xff08;一&#xff09;安装、升级和删除软件包安装软件包安装…

抽取大小: 高斯sigma_无服务器:SLAppForge Sigma入门

抽取大小: 高斯sigma&#xff01; Cmere。 寻找某事&#xff1f; 无服务器&#xff0c;是吗&#xff1f; 在上面。 进入海峡&#xff0c;在“ Sigma”标志处右转。 &#xff08;嗯&#xff0c;还不要怪我们&#xff1b;至少我们认为这很容易&#xff01;&#xff09; 我们…

java多线程 修改优先级_Java多线程-线程的调度(优先级)

与线程休眠类似&#xff0c;线程的优先级仍然无法保障线程的执行次序。只不过&#xff0c;优先级高的线程获取CPU资源的概率较大&#xff0c;优先级低的并非没机会执行。线程的优先级用1-10之间的整数表示&#xff0c;数值越大优先级越高&#xff0c;默认的优先级为5。在一个线…

Linux 命令之 apt-mark -- 对 APT 软件包设置标记

文章目录一、命令介绍二、常用命令三、命令示例&#xff08;一&#xff09;将软件包标记为 unhold一、命令介绍 apt-mark 可以对软件包设置标记&#xff0c;列出或过滤拥有某个标记的软件包。 二、常用命令 命令说明auto标记指定软件包为自动安装manual标记指定软件包为手动…

java魔兽猎人_Java基于Swing实现的打猎射击游戏代码

package Game;import static java.lang.Math.random;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class MainFrame extends JFrame {private static final long serialVersionUID 1L;private static long score 0;// 分数private static Integer…

Linux 命令之 aptitude -- APT 软件包管理工具

文章目录一、命令介绍二、常用选项三、命令示例&#xff08;一&#xff09;安装、升级和删除软件包升级系统所有的软件包将系统升级到新的发行版安全升级系统的软件包安装软件包删除软件包&#xff08;保留有关的配置文件&#xff09;彻底删除软件包&#xff08;删除有关的配置…

微软 azure_在Microsoft Azure上运行Eclipse MicroProfile

微软 azure在本文中&#xff0c;我将通过展示如何在Microsoft Azure Web Apps for Containers中执行操作来跟踪有关在Oracle Cloud中运行Eclipse MicroProfile应用程序的系列文章。 我正在使用与以前的帖子相同的简单应用程序CloudEE Duke 。 唯一的区别是&#xff0c;我现在将…

java文件复制速度_【Java】Java代码拷贝文件的速度

Java代码拷贝文件的速度究竟有多快&#xff1f;前言最近学习Java到了流处理&#xff0c;其中有种流叫FileInputStream和FileOutputStream&#xff0c;简单来说&#xff0c;就是操作文件的&#xff0c;老师给我们示范了一个非常有趣的例子&#xff0c;用代码拷贝文件&#xff01…

vim 的配置详解/键盘映射配置详解

文章目录特性设置配置快捷键&#xff08;键映射配置&#xff09;键盘符号键盘映射命令和不同模式的对应关系取消键盘映射查看键盘映射在目录 /etc/ 下面&#xff0c;有个名为 vimrc 的文件&#xff0c;这是系统中公共的 vim 配置文件&#xff0c;对所有用户都有效。而在每个…

开闭原则 依赖倒置原则_坚实原则:依赖倒置原则

开闭原则 依赖倒置原则到目前为止&#xff0c;我们只研究了单一职责 &#xff0c; 打开/关闭 &#xff0c; liskov替换和接口隔离原则。 依赖倒置是我们所要研究的最后一个原理之一。 该原则指出 答&#xff1a;高级模块不应依赖于低级模块。 两者都应依赖抽象。 B.抽象不应…

java的传值调用什么_Java的传值调用

(本文非引战或diss&#xff0c;只是说出自己的理解&#xff0c;欢迎摆正心态观看或探讨)引子之所以写这篇文章是因为前些天写了一篇《Java中真的只有值传递么&#xff1f;》探讨了网上关于Java只有值传递的说法&#xff0c;当时写这篇文章的缘由是因为之前看的文章讲解的Java只…