重构
关于重构的一些手法
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 · 216 阅读 · 0 评论 -
6 继承关系重构
1.提炼子类 如果类的一些行为在某种情况下才会用到,那么提炼子类,将这些行为移到子类 2.提炼超类 如果某些类有一些相同的行为,那么提炼超类 // 重构前 class 人{ 吃饭(); 睡觉(); 玩手机(); } class 猴子{ 吃饭(); 睡觉(); 爬树(); } // 重构后 class 动物{ 吃饭(); 睡觉(); } class 人: 动物 { 玩手机(); } class 猴子: 动物{ 爬树();原创 2020-07-21 12:33:58 · 266 阅读 · 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 · 217 阅读 · 0 评论 -
4 表达式重构
1.分解条件表达式( 适用于复杂表达式 ) If( pass() ){ Success(); } Else{ Fail(); } 上述我们将表达式分离为一个pass函数 2.合并条件表达式 If( a==0 || a == 3 || a == 4 ){ Return 0; } 3.合并重复的条件片段 两个if语句的判断表达式相同,那么合并这两个if 4.卫语取代嵌套 If(){ } Else{ If(){ } Else{ } } 替换为如下形式的语法: if(){ return; } I原创 2020-07-21 12:24:35 · 294 阅读 · 0 评论 -
3 类重构
1.以对象取代数据值 如果一个数据值需要和一些行为绑定在一起,那么提炼出一个新类吧 // 重构前 class 房子{ ... int 门的长度; int 门的宽度; int 获取门的面积() { ... } int 获取门的占地面积() { ... } } // 重构后 class 房子{ 门 门; ... } class 门{ int 门的长度; int 门的宽度; int 获取门的面积() { ... } int原创 2020-07-21 12:18:53 · 553 阅读 · 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 · 198 阅读 · 0 评论 -
1 函数重构
局部变量是阻碍函数重构的最大问题,为什么?因为局部变量需要在方法中传来传去 1.提炼函数 将一段代码从过长的函数中提炼为一个函数,前提是这点代码有意义 如果函数需要返回多个值: 推荐拆分成多个方法,每个方法只返回一个值 示例: // 重构前 public void 转账(){ // 假设这里有 100 多行代码 // 但理想情况是每个方法 30 行左右 } // 重构后 public void 转账(){ if(!验证密码()){ throw new Error()原创 2020-07-21 11:58:48 · 403 阅读 · 0 评论