私有方法与静态私有方法

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

大师(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

私有方法与静态私有方法

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

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

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

  2. 30分钟入门Java8之默认方法和静态接口方法

    2019独角兽企业重金招聘Python工程师标准>>> 30分钟入门Java8之默认方法和静态接口方法 作者:@JohnTsai 本文为作者原创,转载请注明出处:http://www ...

  3. 苹果手机应用分身_丢手机丢人都有新保障:苹果将推出改进后的找回手机应用...

    了解更多热门资讯.玩机技巧.数码评测.科普深扒,点击右上角关注我们 ---------------------------------- iPhone丢失后,最让人心急的时刻是想不起最后一次是在哪看到 ...

  4. 构造函数还是静态工厂方法?

    我相信Joshua Bloch在他的非常好的书" Effective Java"中首先说了它:与构造函数相比,静态工厂方法是实例化对象的首选方法. 我不同意. 不仅因为我相信静态方 ...

  5. 类属性、类方法;私有属性、公有属性;私有方法、公有方法;静态属性、静态方法;python的命名规范__xx__\__xx\_xx(自用笔记)

    Ⅰ.类属性.类方法(类和实例都能调用类属性和类方法) 类是一个特殊的对象,Python 中 一切皆对象:class AAA: #定义的类属于 类对象obj1 = AAA() #属于 实例对象 除了封装 ...

  6. 创建对象_工厂方法(Factory Method)模式 与 静态工厂方法

    工厂方法模式: 定义:为创建对象定义一个接口,让子类决定实例化哪个类.工厂方法让一个类的实例化延迟至子类. 应用场景: 客户类不关心使用哪个具体类,只关心该接口所提供的功能: 创建过程比较复杂,例如需 ...

  7. 静态工厂方法代替构造器实例_静态工厂方法与传统构造方法

    静态工厂方法代替构造器实例 之前,我已经讨论过一些关于Builder模式的信息 , Builder Pattern是一种有用的模式,用于实例化具有几个(可能是可选的)属性的类,这些属性可以使读取,编写 ...

  8. 非静态方法可以访问Java中的静态变量/方法吗?

    "非静态方法可以访问静态变量或调用静态方法"是Java中有关静态修饰符的常见问题之一,答案是, 是的 ,非静态方法可以访问静态变量或调用静态方法. Java中的方法. 这没有问题, ...

  9. 第1条:考虑用静态工厂方法代替构造器

    为了获得一个类的实例,有两种办法1.类提供一个公有的构造器 2.类提供一个公有的静态工厂方法. 静态工厂方法的优势: 1.有名称. 慎重地选择方法名称能突出多个构造器的区别,例如使用BigIntege ...

最新文章

  1. Camel之AsyncProcessor
  2. C++基本知识点集锦(2022秋招)
  3. 什么是ownership?
  4. 使用Eclipse与Pydev开发Python
  5. 总量迈过90万亿元关口 中国经济交出稳健答卷
  6. 关键字super的作用 ||  Java内存区域
  7. 转: ashx中使用Session
  8. 【GitHub加速工具,让你的GitHub、StackOverflow网站流畅度快到飞起,建议收藏~】
  9. C++friend 友元类和友元函数
  10. C语言基础专题 - 存储类(编辑中)
  11. windows 2003 iis php,windows 2003 iis安装php 5.2版本步骤
  12. 汇编中DOSBox的使用
  13. Windows 8 六大关机模式 详解
  14. 变限积分 matlab,积分变限函数
  15. 花了10分钟,终于明白矩阵的逆到底有什么用
  16. Microsoft Word 实用功能
  17. Unity学习笔记 关于TextMeshPro(TMP) 字体大小FontSize单位说明
  18. AutoML功能解析
  19. html点击除某个元素之外的元素的事件添加技巧
  20. 一元二次方程方程的类

热门文章

  1. P6619-[省选联考2020A/B卷]冰火战士【树状数组二分】
  2. U102380-简单数据结构题【Trie】
  3. 背包例题の01,完全,多重
  4. POJ2259,luoguUVA540-Team Queue【队列】
  5. 学习分布式不得不会的ACP理论
  6. sleep( ) 和 wait( ) 的这 5 个区别,你知道几个
  7. java图形验证码生成工具类
  8. C++描述杭电OJ 2016. 数据的交换输出 ||
  9. C++描述杭电OJ 2014. 青年歌手大奖赛_评委会打分 ||
  10. 走的走的居然飞起来了……