每个私有静态方法都是新类的候选人

您是否有私有的静态方法来帮助您将算法分解为更小的部分? 我做。 每次编写新方法时,我都会意识到它可以是一个新类。 当然,我不会从所有课程中选修课程,但这是目标。 私有静态方法不可重用,而类则可重用,这是它们之间的主要区别,并且至关重要。

保罗·托马斯·安德森(2012)

这是一个简单类的示例:

class Token {private String key;private String secret;String encoded() {return "key="+ URLEncoder.encode(key, "UTF-8")+ "&secret="+ URLEncoder.encode(secret, "UTF-8");}
}

有明显的代码重复,对吗? 解决该问题的最简单方法是引入私有静态方法:

class Token {private String key;private String secret;String encoded() {return "key="+ Token.encoded(key)+ "&secret="+ Token.encoded(secret);}private static String encoded(String text) {return URLEncoder.encode(text, "UTF-8");}
}

现在看起来好多了。 但是,如果我们有另一个需要完全相同功能的类会发生什么呢? 我们将不得不复制并粘贴此私有静态方法encoded() ,对吗?

更好的选择是引入一个新的Encoded类,该类实现了我们想要共享的功能:

class Encoded {private final String raw;@Overridepublic String toString() {return URLEncoder.encode(this.raw, "UTF-8");}
}

然后:

class Token {private String key;private String secret;String encoded() {return "key="+ new Encoded(key)+ "&secret="+ new Encoded(secret);}
}

现在,此功能是1)可重用,和2)可测试的。 我们可以在许多其他地方轻松使用Encoded这个类,并且可以为其创建单元测试。 以前,我们无法使用private static方法来做到这一点。

明白了吗? 我已经为自己确定的经验法则是, 每个私有静态方法都是新类的理想选择。 这就是为什么我们在EO中根本没有它们的原因。

顺便说一下, 公共静态方法是另一回事。 它们也是邪恶的,但是出于不同的原因 。

您可能还会发现这些相关的帖子很有趣: 对象行为一定不可配置 ; 对象可以成为朋友吗? ; 只有一个主要的建设者 ;

翻译自: https://www.javacodegeeks.com/2017/02/private-static-method-candidate-new-class.html

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

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

相关文章

448. Find All Numbers Disappeared in an Array

一、题目 1、审题  2、分析 一个整形数组!元素值为 1~size; 出现的元素次数为 1~2 次。 求出所有 1~size 中没有出现的整数! 二、解答 1、思路 由于元素值都为 1~size之间。所以可以将数组下标 index 进行联系。 ① 遍历数组,将出现的元素值…

枚举:如何正确使用name()和toString()方法

两种方法之间的区别? Java枚举有两种方法来检索枚举常量的值: name()和.toString() 。 toString()方法调用name()方法,该方法返回枚举常量的字符串…

gradle maven_Gradle – Maven的观点

gradle maven正如我博客的读者所知道的, 我有点像Maven迷 。 我从2007年8月左右开始使用Maven,从没有回过头。 但是,与其他所有情况一样,“变化是唯一的常数”。 现在这个领域还有其他参与者,Gradle似乎是最有前途的。…

JDK 9中已弃用Java的Observer和Observable

在博客文章《 应用JDK 9 Deprecated增强功能》中 ,我讨论了JDK 9中 Deprecated批注中对forRemoval()和since()可选元素(方法)的添加 。 我在那篇文章中说:“在Java SE API上应用新的…

理解依赖注入(IOC)和学习Unity

IOC:英文全称:Inversion of Control,中文名称:控制反转,它还有个名字叫依赖注入(Dependency Injection)。 作用:将各层的对象以松耦合的方式组织在一起,解耦,各层对象的调…

java中怎样验证重复文件_java – 如何在下载之前检查URL中的重复文件

如果您有基本URL并存储具有相同文件名的文件.由于文件修改时间和If-Modified-Since HTTP Header,您可以询问服务器是否值得再次下载映像.File f new File();// the file to downloadHttpURLConnection con (HttpURLConnection) new URL("http://www.test.com/"f.ge…

Jason是炮王

Jason是炮王 转载于:https://www.cnblogs.com/TankJam/p/11203636.html

事件传递 java_将事件传递/发送到父组件?

在Angular中,我可以创建一个发出动作的子组件:Component({...template: Click Me})export class ChildComponent {Output() onChildAction new EventEmitter();childAction() {this.onChildAction.emit();}}以及处理它的父组件 . 就像是:Com…

mongodb身份验证_MongoDB身份验证

mongodb身份验证我最近更新了Mongometer ,使其更加灵活。 发布新版本后不久,其中一位用户通过在帖子中发表评论来反馈问题。 我启动了我的机器,打开了我的IDE,发现了问题,并在半小时内将修补程序推送到了github 。 这不…

mysql列类型

http://hi.baidu.com/b37798969/item/429fb25f838f1d3233e0a99b MySQL支持大量的列类型,它可以被分为3类:数字类型、日期和时间类型以及字符串(字符)类型。本节首先给出可用类型的一个概述,并且总结每个列类型的存储需求,然后提供…

Java13的API_JAVA基础--JAVA API常见对象(其他API)13

一、其他API1.System类system类中的方法和成员变量都是静态的, 不需要创建System对象就可以直接使用。1 /*2 * 演示System的使用3 */4 public classSystemDemo {5 public static voidmain(String[] args) {67 /*8 * System类中的静态成员变量: out 和 er…

适用于Java开发人员的Elasticsearch:简介

本文是我们学院课程的一部分,该课程的标题为Java开发人员的Elasticsearch教程 。 在本课程中,我们提供了一系列教程,以便您可以开发自己的基于Elasticsearch的应用程序。 我们涵盖了从安装和操作到Java API集成和报告的广泛主题。 通过我们简…

人民邮电出版社图灵公司的两本SQL Server 2005图书诚征译者

人民邮电出版社图灵公司介绍(来自http://www.turingbook.com/) 北京图灵文化发展有限公司成立于2005年6月,由人民邮电出版社投资控股,以策划出版高质量的科技书籍为核心业务,主要出版领域包括计算机、电子电气、数学统…

java容器类继承_JAVA容器 - weslie - OSCHINA - 中文开源技术交流社区

一、 数组1、数组是保存一组对象的最有效的方式。但数组有固定的尺寸而受限(p216)2、数组与其他种类的容器之间的区别有三方面:效率、类型和保存基本类型的能力。在Java中,数组是一种效率最高的存储和随机访问对象引用序列的方式。数组就是一个简单的线性…

前端通信

Node中的net模块提供的前端通信 H5提供的 webSocket 【 常用于 移动端 】pc端低版本浏览器使用 socket.io 通信- 服务端: 总的服务器 举例: 腾讯的qq服务器 1个整体- 客户端: 单个用户使用应用 举例: 每个人的qq 多个client.js 客…

java定位线程阻塞_Arthas - 定位 Java 性能问题原来这么简单

目录:一、Arthas 介绍二、Arthas 使用场景三、Arthas怎么使用四、Arthas 定位性能问题定位Java代码导致占用CPU高的问题线程死锁前言:在做性能测试的过程中,当遇到Java性能问题,比如CPU飙升,负载突高,内存溢…

SVN 本地文件锁/服务端文件锁清除步骤

1.本地文件锁,直接cleanup,cleanup界面选择break locks即可 2.服务端文件锁,本地文件右击没有release lock或者break lock的选项时 方法1:右键,svn选择browser repo,找到该文件,右击&#xff0c…

java 对象复活_Java对象复活

java 对象复活总览 收集覆盖了finalize()的对象之后,将其添加到终结处理队列中,以在调用每个对象的finalize()方法之后进行清理。 如果您复活了物体,会发生什么? 何时定案&#xff…

a b和c 15 java_1011. A+B和C (15)

给定区间[-231, 231]内的3个整数A、B和C&#xff0c;请判断AB是否大于C。输入格式&#xff1a;输入第1行给出正整数T(<10)&#xff0c;是测试用例的个数。随后给出T组测试用例&#xff0c;每组占一行&#xff0c;顺序给出A、B和C。整数间以空格分隔。输出格式&#xff1a;对…

深入浅出《设计模式》之工厂模式(C++)

前言 模式介绍 在之前简单工厂模式中&#xff0c;我们介绍了简单工厂模式的缺陷是违背了开放-封闭原则。如果在面馆中添加了烤海参&#xff0c;那将会修改waiter工厂类。违背了类内封闭原则。 还以面馆为例&#xff0c;现在两种面&#xff0c;用一个服务员来卖就可以&#xff0…