私有方法与静态私有方法_每个私有静态方法都是新类的候选人
私有方法与静态私有方法
您是否有私有的静态方法来帮助您将算法分解为更小的部分? 我做。 每当我编写一个新方法时,我就会意识到它可以是一个新类。 当然,我不会从所有课程中选修课程,但这必须是目标。 私有静态方法不可重用,而类则可重用,这是它们之间的主要区别,并且至关重要。
大师(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
私有方法与静态私有方法
私有方法与静态私有方法_每个私有静态方法都是新类的候选人相关推荐
- 每个私有静态方法都是新类的候选人
您是否有私有的静态方法来帮助您将算法分解为更小的部分? 我做. 每次编写新方法时,我都会意识到它可以是一个新类. 当然,我不会从所有课程中选修课程,但这是目标. 私有静态方法不可重用,而类则可重用,这 ...
- 30分钟入门Java8之默认方法和静态接口方法
2019独角兽企业重金招聘Python工程师标准>>> 30分钟入门Java8之默认方法和静态接口方法 作者:@JohnTsai 本文为作者原创,转载请注明出处:http://www ...
- 苹果手机应用分身_丢手机丢人都有新保障:苹果将推出改进后的找回手机应用...
了解更多热门资讯.玩机技巧.数码评测.科普深扒,点击右上角关注我们 ---------------------------------- iPhone丢失后,最让人心急的时刻是想不起最后一次是在哪看到 ...
- 构造函数还是静态工厂方法?
我相信Joshua Bloch在他的非常好的书" Effective Java"中首先说了它:与构造函数相比,静态工厂方法是实例化对象的首选方法. 我不同意. 不仅因为我相信静态方 ...
- 类属性、类方法;私有属性、公有属性;私有方法、公有方法;静态属性、静态方法;python的命名规范__xx__\__xx\_xx(自用笔记)
Ⅰ.类属性.类方法(类和实例都能调用类属性和类方法) 类是一个特殊的对象,Python 中 一切皆对象:class AAA: #定义的类属于 类对象obj1 = AAA() #属于 实例对象 除了封装 ...
- 创建对象_工厂方法(Factory Method)模式 与 静态工厂方法
工厂方法模式: 定义:为创建对象定义一个接口,让子类决定实例化哪个类.工厂方法让一个类的实例化延迟至子类. 应用场景: 客户类不关心使用哪个具体类,只关心该接口所提供的功能: 创建过程比较复杂,例如需 ...
- 静态工厂方法代替构造器实例_静态工厂方法与传统构造方法
静态工厂方法代替构造器实例 之前,我已经讨论过一些关于Builder模式的信息 , Builder Pattern是一种有用的模式,用于实例化具有几个(可能是可选的)属性的类,这些属性可以使读取,编写 ...
- 非静态方法可以访问Java中的静态变量/方法吗?
"非静态方法可以访问静态变量或调用静态方法"是Java中有关静态修饰符的常见问题之一,答案是, 是的 ,非静态方法可以访问静态变量或调用静态方法. Java中的方法. 这没有问题, ...
- 第1条:考虑用静态工厂方法代替构造器
为了获得一个类的实例,有两种办法1.类提供一个公有的构造器 2.类提供一个公有的静态工厂方法. 静态工厂方法的优势: 1.有名称. 慎重地选择方法名称能突出多个构造器的区别,例如使用BigIntege ...
最新文章
- Camel之AsyncProcessor
- C++基本知识点集锦(2022秋招)
- 什么是ownership?
- 使用Eclipse与Pydev开发Python
- 总量迈过90万亿元关口 中国经济交出稳健答卷
- 关键字super的作用 || Java内存区域
- 转: ashx中使用Session
- 【GitHub加速工具,让你的GitHub、StackOverflow网站流畅度快到飞起,建议收藏~】
- C++friend 友元类和友元函数
- C语言基础专题 - 存储类(编辑中)
- windows 2003 iis php,windows 2003 iis安装php 5.2版本步骤
- 汇编中DOSBox的使用
- Windows 8 六大关机模式 详解
- 变限积分 matlab,积分变限函数
- 花了10分钟,终于明白矩阵的逆到底有什么用
- Microsoft Word 实用功能
- Unity学习笔记 关于TextMeshPro(TMP) 字体大小FontSize单位说明
- AutoML功能解析
- html点击除某个元素之外的元素的事件添加技巧
- 一元二次方程方程的类
热门文章
- P6619-[省选联考2020A/B卷]冰火战士【树状数组二分】
- U102380-简单数据结构题【Trie】
- 背包例题の01,完全,多重
- POJ2259,luoguUVA540-Team Queue【队列】
- 学习分布式不得不会的ACP理论
- sleep( ) 和 wait( ) 的这 5 个区别,你知道几个
- java图形验证码生成工具类
- C++描述杭电OJ 2016. 数据的交换输出 ||
- C++描述杭电OJ 2014. 青年歌手大奖赛_评委会打分 ||
- 走的走的居然飞起来了……