【1】源代码
1 // 重构前 2 class Account 3 { 4 public: 5 double overdraftCharge() 6 { 7 if (m_type.isPremium()) 8 { 9 double result = 10; 10 if (m_nDaysOverdrawn > 7) 11 { 12 result += (m_nDaysOverdrawn - 7) * 0.85; 13 } 14 return result; 15 } 16 else 17 { 18 return m_nDaysOverdrawn * 1.75; 19 } 20 } 21 22 private: 23 AccountType m_type; 24 int m_nDaysOverdrawn; 25 };
【2】搬移函数
1 class AccountType 2 { 3 public: 4 double overdraftCharge(int daysOverdrawn) 5 { 6 if (isPremium()) // 直接调用成员函数 7 { 8 double result = 10; 9 if (daysOverdrawn > 7) 10 { 11 result += (daysOverdrawn - 7) * 0.85; 12 } 13 return result; 14 } 15 else 16 { 17 return daysOverdrawn * 1.75; 18 } 19 } 20 21 bool isPremium() 22 { 23 // do something.... 24 return true; 25 } 26 }; 27 28 class Account 29 { 30 public: 31 double bankCharge() 32 { 33 double result = 4.5; 34 if (m_nDaysOverdrawn > 0) 35 { 36 result += m_type.overdraftCharge(m_nDaysOverdrawn); // 成员变量m_nDaysOverdrawn作为参数传递给目标类 37 } 38 return result; 39 } 40 41 private: 42 AccountType m_type; 43 int m_nDaysOverdrawn; 44 };
【3】总结
在程序中,如果有个函数与其所驻之类的另外一个类进行更多交流,调用后者或被后者调用。
在该函数最常引用的类中建立一个有着类似行为的新函数。
将旧函数变成一个单纯的委托函数,或将旧函数完全移除。
Good Good Study, Day Day Up.
顺序 选择 循环 总结