重构
关于重构的一些手法
dabusidede
Github:https://github.com/IceEmblem,
Word文档文章:https://github.com/IceEmblem/LearningDocuments
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
7 大型重构
1.分解继承体系如果某个继承体系承担了两个职责,那么分解这个继承体系// 重构前class 洗衣机{ 设置脱水时间(); 脱水(); 设置洗衣时间(); 洗衣();}class 海尔洗衣机: 洗衣机{}class 格力洗衣机: 洗衣机{}// 重构后class 脱水机{ 设置脱水时间(); 脱水();}class 洗衣机{ // 洗衣机具有脱水机的功能 脱水机 脱水机; public 洗衣机(脱水机 脱水机){原创 2020-07-21 12:35:55 · 277 阅读 · 0 评论 -
6 继承关系重构
1.提炼子类如果类的一些行为在某种情况下才会用到,那么提炼子类,将这些行为移到子类2.提炼超类如果某些类有一些相同的行为,那么提炼超类// 重构前class 人{ 吃饭(); 睡觉(); 玩手机();}class 猴子{ 吃饭(); 睡觉(); 爬树();}// 重构后class 动物{ 吃饭(); 睡觉();}class 人: 动物 { 玩手机();}class 猴子: 动物{ 爬树();原创 2020-07-21 12:33:58 · 329 阅读 · 0 评论 -
5 函数调用重构
1.将查询函数和修改函数分离// 重构前class Person{ int age; int SetAge(int newAge){ age = newAge; return age; }}// 重构后class Person{ int age; void SetAge(int newAge){ age = newAge; } void GetAge(){ return age原创 2020-07-21 12:30:27 · 271 阅读 · 0 评论 -
4 表达式重构
1.分解条件表达式( 适用于复杂表达式 )If( pass() ){ Success();}Else{ Fail();}上述我们将表达式分离为一个pass函数2.合并条件表达式If( a==0 || a == 3 || a == 4 ){ Return 0;}3.合并重复的条件片段两个if语句的判断表达式相同,那么合并这两个if4.卫语取代嵌套If(){}Else{ If(){ } Else{ }}替换为如下形式的语法:if(){ return; }I原创 2020-07-21 12:24:35 · 356 阅读 · 0 评论 -
3 类重构
1.以对象取代数据值如果一个数据值需要和一些行为绑定在一起,那么提炼出一个新类吧// 重构前class 房子{ ... int 门的长度; int 门的宽度; int 获取门的面积() { ... } int 获取门的占地面积() { ... }}// 重构后class 房子{ 门 门; ...}class 门{ int 门的长度; int 门的宽度; int 获取门的面积() { ... } int原创 2020-07-21 12:18:53 · 683 阅读 · 0 评论 -
2 类间重构
1.搬移函数一个函数与另一个类交流更多// 重构前class A(){ B b; void fun1(){ b.fun2(); b.fun3(); var sum = b.sum; }}class B(){ ...}// 重构后class A(){ B b;}class B(){ void fun1(){ fun2(); fun3(); v原创 2020-07-21 12:00:42 · 253 阅读 · 0 评论 -
1 函数重构
局部变量是阻碍函数重构的最大问题,为什么?因为局部变量需要在方法中传来传去1.提炼函数将一段代码从过长的函数中提炼为一个函数,前提是这点代码有意义如果函数需要返回多个值:推荐拆分成多个方法,每个方法只返回一个值示例:// 重构前public void 转账(){ // 假设这里有 100 多行代码 // 但理想情况是每个方法 30 行左右}// 重构后public void 转账(){ if(!验证密码()){ throw new Error()原创 2020-07-21 11:58:48 · 495 阅读 · 0 评论
分享