自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 资源 (25)
  • 收藏
  • 关注

原创 Duplicate Observed Data(复制“被监视数据”)

一些领域数据置身于GUI控件中,而领域函数需要访问这些数据重构:将该数据复制到一个领域对象中。建立一个Observer 模式,可以同步领域对象和GUI 对象内的重复数据。动机 一个分层良好的系统,应该将处理用户界面和处理业务逻辑的代码分开。之所以这样做,有以下2点原因: 1、可能需要使用不同的用户界面来表现相同的业务逻辑,如果同时承担两种责任,用户界面会变得过分复杂; 2、与GUI 隔离之后,领域对象的维护和演化都会更容易。 ...

2021-08-31 21:17:27 253

原创 Replace Array with Object(以对象取代数组)

有一个数组,其中的元素各自代表不同的东西String[] row = new String[3];row[0] = "Liverpool";row[1] = "15";重构:以对象替换数组。对于数组中的每个元素,以一个字段来表示Performance row = new Performance();row.setName("Liverpool");row.setWins("15");...

2021-08-31 20:48:01 116

原创 Change Value to Reference(将值对象改为引用对象)

从一个类衍生出许多彼此相等的实例,希望将他们替换为同一个对象将这个值对象变成引用对象。动机 在许多系统中,你都可以为对象做一个有用的分类:引用对象和值对象。前者就像“客户”、“账户”这样的东西,每个对象都代表真实世界中的一个实物,你可以直接使用==检查两个对象是否相等。后者则是像“日期”、“钱”这样的东西,它们完全由其所含的数据值来定义,你并不在意副本的存在,当然,你也需要知道两个对象是否相等,所以你需要覆写equals() 和 hashCode()。...

2021-08-31 20:42:45 269

原创 Replace Data Value with Object(以对象取代数据值)

有一个数据项,需要与其他数据和行为一起使用才有意义将数据项变成对象。动机 开发初期,你往往决定以简单的数据项表示简单的情况。但是,随着开发的进行,你可能会发现,这些简单数据项不再那么简单了。比如说,一开始你可能会用一个字符串来表示“电话号码”概念,但是随后你就会发现,电话号码需要“格式化”、“抽取区号”之类的特殊行为。...

2021-08-31 20:23:05 230

原创 代码整洁之道--思维导图

#思维导图源码System.out.println("https://www.processon.com/view/60dede90e401fd7e342b3fc3?fromnew=1");

2021-08-27 22:05:58 303

原创 Effective Java -- 思维导图

2021-08-27 22:02:25 168

原创 代码精进之路--思维导图

2021-08-27 21:57:16 494

原创 解构领域驱动设计--思维导图

2021-08-27 20:01:06 1261

原创 Self Encapsulate Field(自封装字段)

直接访问一个字段,但与字段之间的耦合关系逐渐变得笨拙private int low;private int high;boolean includes(int arg) { return arg >= low && arg <= high;}重构:为这个字段建立get/set函数,并以这些函数访问字段private int low;private int high;public int getLow() { return low;}publ

2021-08-26 21:35:32 241

原创 Introduce Foreign Method(引入外加函数)

需要为提供服务的类增加一个函数,但你无法修改这个类Date newStart = new Date(previousEnd.getYear(), previousEnd.getMonth(), previousEnd.getDate() + 1);重构:在客户类中建立一个函数Date newStart = nextDay(previousEnd); private static Date nextDay(Date arg) { return new Date(arg.ge

2021-08-26 20:55:38 166

原创 Hide Delegate(隐藏“委托关系”)

通过一个委托类来调用另一个对象重构:在服务类上建立客户所需的所有函数,用以隐藏委托关系。

2021-08-26 20:46:34 189

原创 Substitute Algorithm(替换算法)

把某个算法替换成另一个更清晰的算法public String foundPerson(String[] people) { for(int i=0; i<people.length; i++) { if (people[i].equals("Don")) { return "Don"; } if (people[i].equals("John")) { return "John"; } if (people[i].equals("Kent")) { ret

2021-08-24 21:36:37 253

原创 Replace Method with Method Object(以函数对象取代函数)

在一个大型函数中,由于局部变量的使用导致无法采用ExtractMethodclass Order... double price() { double primaryBasePrice; double secondaryBasePrice; double teriaryBasePrice; // long computation. .... }}重构:将这个函数放进一个单独对象中,局部变量成了对象内的字段...

2021-08-24 20:53:38 208

原创 Remove Assignments to Parameters(移除对参数的赋值)

对入参进行赋值int discount(int inputVal, int quantity, int yearToDate) { if (inputVal > 50) { inputVal -= 2; }}重构:用一个临时变量取代该参数int discount(int inputVal, int quantity, int yearToDate) { int result = inputVal; if (inputVal > 50) { result -= 2

2021-08-24 20:28:18 151

原创 Split Temporary Variable(分解临时变量)

某个变量被赋值超过一次,它既不是循环变量,也不被用于汇总结果double temp = 2 * (height + width);System.out.println(temp);temp = height * width;System.out.println(temp);重构后final double perimeter = 2 * (height + width);System.out.println(perimeter);final double area = height

2021-08-24 20:23:12 203

原创 Introduce Explaining Variable(引入解释性变量)

难于理解的复杂表达式if ((platform.toUpperCase().indexOf("MAC") > -1) && (brower.toUpperCase().indexOf("IE") > -1) && wasInitialized && resize > 0) { // do something}重构后final boolean isMacOS = platform.toUpperCase().inde

2021-08-24 18:15:58 217

原创 Replace Temp with Query(以查询取代临时变量)

一个临时变量保存某一个表达式的运算结果double basePrice = quantity * itemPrice;if (basePrice > 1000) { return basePrice * 0.95;} else { return basePrice * 0.98;}重构后if (basePrice() > 1000) { return basePrice() * 0.95;} else { return basePrice() * 0.98;}

2021-08-24 16:37:44 130

原创 Inline Temp(内联临时变量)

一个临时变量,只被一个简单表达式赋值一次,而它妨碍了其他重构手法double basePrice = anOrder.basePrice();return basePrice > 1000;重构后return anOrder.basePrice() > 1000;

2021-08-24 16:27:38 200

原创 重构--思维导图

2021-08-24 16:16:44 349

原创 Inline Method(内联函数)

一个函数的本体与名称同样清楚易懂int getRating() { return moreThanFiveLateDeliveries() ? 2 : 1;}boolean moreThanFiveLateDeliveries() { return numberOfLateDelivers > 5;}重构后int getRating() { return (numberOfLateDelivers > 5) ? 2 : 1;}...

2021-08-24 16:13:18 207

转载 guava限流器RateLimiter原理及源码分析

来源:https://www.cnblogs.com/zhandouBlog/p/11743660.html前言RateLimiter是基于令牌桶算法实现的一个多线程限流器,它可以将请求均匀的进行处理,当然他并不是一个分布式限流器,只是对单机进行限流。它可以应用在定时拉取接口数据,预防单机过大流量使用。原理首先先讲一下令牌桶的原理,每隔一段时间生产一个令牌放入桶里,请求在执行时需要拿到令牌才可以执行,如果拿不到令牌将等待令牌产生,一个生产者,多个消费者。但是这样的令牌桶有一个问题,如

2021-08-12 14:13:58 609

转载 几种限流器(RateLimiter)原理与实现

来源:https://blog.csdn.net/netyeaxi/article/details/104270337限流器(RateLimiter)主要有两种算法:漏桶算法令牌桶算法它们都是网络世界中流量整形(Traffic Shaping)或速率限制(Rate Limiting)时经常使用的算法。漏桶算法漏桶算法(Leaky Bucket),它的主要目的是控制数据注入到网络的速率,平滑网络上的突发流量。漏桶算法提供了一种机制,通过它,突发流量可以被整形以便为网络提供一个稳定的流量

2021-08-12 14:12:14 3028

转载 Guava RateLimiter限流原理解析

来源:https://zhuanlan.zhihu.com/p/60979444限流是保护高并发系统的三把利器之一,另外两个是缓存和降级。限流在很多场景中用来限制并发和请求量,比如说秒杀抢购,保护自身系统和下游系统不被巨型流量冲垮等。限流的目的是通过对并发访问/请求进行限速或者一个时间窗口内的的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务或进行流量整形。常用的限流方式和场景有:限制总并发数(比如数据库连接池、线程池)、限制瞬时并发数(如nginx的limitconn模块,用来限制瞬时并

2021-08-12 14:10:20 390

转载 Java中的时区转换

转载自 halfclear 原文:https://blog.csdn.net/halfclear/article/details/775739561.Date中保存的是什么在java中,只要我们执行Date date = new Date();就可以得到当前时间。如:Date date = new Date();System.out.println(date);1 2输出结果是:Thu Aug 24 10:15:29 CST 2017也就是我执行上述代码的时刻:2017年8月

2021-08-11 21:30:36 9153

原创 如何设计一个安全对外的接口

来源:https://mp.weixin.qq.com/s/eDXsqyfIKDXii0DB6W0UcA

2021-08-06 11:28:27 126

原创 Java消息服务思维导图笔记

https://www.processon.com/view/link/610b5f201efad40724bdfae2

2021-08-05 11:48:12 106

原创 JMS之企业消息传送

企业消息传送:消息是通过网络从一个系统异步传送给其他系统的。客户端:使用消息传送API 的一个业务应用程序或组件(如:JMS)

2021-08-05 11:30:04 111

测试大包.zip

Java测试驱动开发,JUnit.in.Action.2nd,测试驱动开发的艺术,有效单元测试(Effective unit testing)

2019-10-25

事实.png 思维导图笔记

事实,用数据思考,避免情绪化决策

2019-07-28

Java事务设计策略-思维导图

Java事务设计策略-思维导图

2019-04-20

卓有成效管理者-思维导图PDF

卓有成效管理者,思维导图,PDF文件

2019-04-13

JSONView.exe

JSONView.exe

2015-06-05

FindJar.exe

FindJar.exe Javaq包搜索工具

2015-06-05

SqlDebugUtil

SqlDebugUtil.java

2015-06-05

BigDecimalTest

BigDecimal操作示例

2015-06-04

NClass-NClass-NClass

NClass 类图工具

2015-05-25

wms-Params自动生成get-set方法

wms-Params自动生成get-set方法

2013-05-17

Oracle SQL 高级编程 附源码

Oracle SQL 高级编程 附源码

2012-09-03

Cryptography and Network Security Principles and Practice( 5th ).pdf

Cryptography and Network Security Principles and Practice( 5th ).pdf Cryptography and Network Security Principles and Practice( 5th ).pdf Cryptography and Network Security Principles and Practice( 5th ).pdf Cryptography and Network Security Principles and Practice( 5th ).pdf

2012-05-30

算法导论习题答案(2版)

算法导论习题答案(2版).pdf

2012-05-29

Introduction to Algorithms(Second Edition).pdf

Introduction to Algorithms(Second Edition)

2012-05-29

JAVA并发编程实践.zip

JAVA并发编程实践代码

2012-05-28

ongl源代码

ongl源代码

2012-05-28

简单示例:弹出Div

来源:http://www.sunchis.com/html/js/jssource/2010/0504/152.html

2011-11-04

classloader.zip

Inside Class Loader-----Codes Inside Class Loader-----Codes Inside Class Loader-----Codes Inside Class Loader-----Codes Inside Class Loader-----Codes

2011-07-19

Properties Editor

Properties Editor,日本人开发的用于查看.properties文件。非常好的插件!

2011-07-18

重构-Refactoring Improving The Design Of Existing Code.chm

重构 重构 重构 重构 重构 重构 重构 重构

2011-07-06

JUnit.in.Action.2nd.pdf

JUnit.in.Action.2nd.pdf JUnit.in.Action.2nd.pdf JUnit.in.Action.2nd.pdf JUnit.in.Action.2nd.pdf JUnit.in.Action.2nd.pdf JUnit.in.Action.2nd.pdf

2011-07-06

Flex4-in-Action.pdf

Flex4-in-Action Flex4-in-Action Flex4-in-Action Flex4-in-Action Flex4-in-Action Flex4-in-Action

2011-07-06

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除