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

私有方法与静态私有方法

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

大师(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这个类,并且可以为其创建单元测试。 以前,我们无法使用私有静态方法来做到这一点。

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

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

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

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

私有方法与静态私有方法

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

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

相关文章

c语言插入排序_还有这种操作?C语言插入排序算法,一点就透

插入排序算法是所有排序方法中最简单的一种算法,其主要的实现思想是将数据按照一定的顺序一个一个的插入到有序的表中,最终得到的序列就是已经排序好的数据。更多C/C资料群文件:569268376直接插入排序是插入排序算法中的一种,采用…

Mac 如何操控远程的 Windows 电脑

文章目录使用 Remote Desktop Connection for mac 客户端第 1 步:Windows 电脑进行远程设置第 2 步:Windows 电脑设置管理员账号和密码第 3 步:获取 Windows 电脑的 IP 地址第 4 步:Mac 电脑安装远程桌面连接客户端第 5 步&#x…

map iterator_一个简单的Map Iterator性能测试

map iteratorJava Map性能有很多方面可以衡量,但是关键的一个是简单的单线程扫描。 这是一些针对Iterators和Java 8 Map.forEach()简单测试代码,以及一些图形结果。 1.性能测试困难 性能测试是一项非常困难的工作,精确的可重复性测试需要Jav…

学生用计算机中sto,STO 文件扩展名: 它是什么以及如何打开它?

STO 疑难解答常见的 STO 打开问题Ecru Software PRO100 不存在你尝试加载 STO 文件并收到错误,例如 “%%os%% 无法打开 STO 文件扩展名”。 如果是这种情况,通常是因为 你的计算机上没有安装 Ecru Software PRO100 for %%os%%。 由于您的操作系统不知道如…

MacBook 使用 Loopback 录屏和录音频(MacBook 录屏教程/录视频教程/Loopback 教程)

文章目录一、下载软体二、Loopback 界面介绍三、设置系统的声音输入/输出设备(一)设置声音输入设备(二)设置声音输出设备四、录制程序中选择声音输入设备五、开始录制一、下载软体 在網路上可以找到破解版的軟體 Loopback 二、L…

惠普照片打印软件_被看错的打印机?原来打印机还可以这么玩

孩提时代,经常弄丢试卷的小值君曾频繁地与打印店打交道,那是我最早接触打印机的时候。白驹过隙,时至当下,打印设备已然成为家庭不可或缺的部分。印象中,打印机要不就是打打文档,要不就是打打照片&#xff0…

戴尔G3笔记本使用U盘重装操作系统

戴尔G3笔记本 下载安装大白菜U盘启动盘制作软件根据使用说明完成启动盘制作下载操作系统ISO文件重启电脑,连续按F12,打开如下界面后选择红色线框选项: 进入PE系统界面,打开【大白菜】,看到如下界面:

valid floating point value什么意思_为什么 0.1 + 0.2 = 0.300000004?

往期热门文章:1、《往期精选优秀博文都在这里了!》2、求求你!数据库不要再使用外键了?3、还在写慢SQL?4、ELK太笨重了?想放弃?快试试日志系统新贵Loki吧!5、谁再悄咪咪的吃掉异常&am…

在抽象类中可以没有抽象方法_是否可以在最终课程中使用抽象方法?

在抽象类中可以没有抽象方法这是最近在Java开发人员工作面试的电话面试中向我的一位读者提出的有趣的Java核心问题之一。 即使他知道你 无法用Java将抽象类定型为final ,他对方法的措辞感到困惑。 答案很简单,不,在Java的最终类中不可能有抽…

python二维列表排序_使用Python按顺时针方向排序二维坐标列表?

这应该说明问题,给出一个可视化工具 但对于在同一距离上获得一组点的正确入口点来说,这并不总是有效的import random import pylab import cmath from itertools import groupby pts [(random.randrange(-5,5), random.randrange(-5,5)) for _ in range…

微型计算机生产工艺,bb肥生产设备制造工艺流程

原标题:bb肥生产设备制造工艺流程BB肥生产设备与有机肥设备相比较而言设备相对简单,因而BB肥便具有投资小的优点,而且因其配方灵活,非常适合我国正在推广的测土配方肥的需要,是一种非常适合我国国情的肥料。在发达国家…

devc++鼠标变成了光标_Excel填充别再用鼠标拖拉了!用这4个方法,效率至少高10倍!...

Hello,各位叨友们好呀!我是叨叨君~根据下表对照一下自己,在Excel中需要批量填充公式的时候,你是不是还在用鼠标拖拉的方法,将光标放在单元格的右下角,然后按鼠标左键,向下拖动,填充完…

运动基元_开发人员的新分布式基元

运动基元面向对象的基元(进程内基元) 作为Java开发人员,我非常熟悉面向对象的概念,例如类,对象,继承,封装,多态性等。除了面向对象的概念之外,我还非常熟悉Java运行时。它…

html5网站 500.19错误,WIN7操作系统创建IIS后浏览时提示HTTP500.19错误是怎么回事?如何解决?...

WIN7操作系统创建IIS后浏览时提示HTTP500.19错误是怎么回事?如何解决?作者:兴邦开发部人气:发表时间:2015年05月18日[文章内容简介]:WIN7操作系统创建IIS后浏览时提示HTTP500.19错误是怎么回事?…

网络位置可以看到另一个人的电脑_计算机组成原理(一)- 冯·诺依曼体系结构...

1 计算机的基本硬件组成早期,DIY一台计算机,要先有三大件CPU内存主板1.1 CPU计算机最重要的核心配件,中央处理器(Central Processing Unit)。计算机的所有“计算”都是由CPU来进行的。CPU是一个超级精细的印刷电路版1.2 内存(Memory)你撰写的程序、打开的…

vaadin_Vaadin提示:以声明方式构建UI

vaadin如果您使用过GWT,那么您可能会发现UiBinder对于设计复杂的UI很有用。 在有关Vaadin的系列文章中,我们希望在Vaadin和GWT之间得出相似之处。 Vaadin提供了多种开箱即用的工具和组件,用于构建复杂且美观的UI。 其中之一是可以像UiBinder那…

关东升python从小白到大牛_《Python从小白到大牛》第3章 第一个Python程序

本章以HelloWorld作为切入点,介绍如何编写和运行Python程序代码。 运行Python程序主要有两种方式: 1.交互式方式运行 2.文件方式运行 本章介绍这两种运行方式实现HelloWorld程序。 使用Python Shell 进入Python Shell可以通过交互…

neo4j 显示名字_Neo4j:绘制“我的名字是……我在工作”图

neo4j 显示名字在过去的几天里,我一直在关注DHH发起的有关“我的名字是……”的推文。 据我了解,其想法是表明在白板上编写采访谜语/艰巨任务是荒谬的。 您好,我叫大卫。 我不会在白板上写气泡排序。 我一直在互联网上查找代码。 我不做谜语…

Final Cut Pro x(FCPX)调色笔记

文章目录一、注意点二、调色流程1. 颜色校正(一级校色)1.1 颜色转换即色彩空间转换1.2 降噪(noise reduction 即NR)1.3 调整曝光和对比度1.4 调整白平衡1.5 饱和度1.6 肤色调整2.二级校色2.1 突出人物主体的方法一2.2 突出人物主体…

axure web组件下载_实践干货:Axure插入图标的4种办法

编辑导读:图标是我们在制作产品原型的时候使用的比较多的一类素材,在日常绘制原型的时候一般是以插入的形式添加到Axure中。本文作者结合自身经验,介绍了四种Axure中引入图标的方法,希望对大家能有所帮助。在日常绘制原型的时候&a…