- Duplicated code
- 在兩個 subclass 裡的 method 做相似的事情,順序一樣,但內容不同。
- 將做相似事情的區塊抽成 method,且 api 一樣,然後將主 method 拉到 superclass。
Before:
- ChildA
public class ChildA extends Parents {
public void doSomething() {
// do a1...
// do b1...
}
} - ChildB
public class ChildB extends Parents {
public void doSomething() {
// do a2...
// do b2...
}
}
- Parents
public class Parents {
public void doSomething() {
this.doA();
this.doB();
}
public [abstract] void doA();
public [abstract] void doB();
} - ChildA
public class ChildA extends Parents {
public void doA() {
// do a1...
}
public void doB() {
// do b1...
}
} - ChildB
public class ChildB extends Parents {
public void doA() {
// do a2...
}
public void doB() {
// do b2...
}
}
當看到 subclass 裡有重複的 code 時,就可以將重複的 code 拉到 superclass 裡,但是當重複的 code 不是完全一樣時,尤其是步驟一樣,內容不一樣時,就可以使用 Form template method 將步驟拉到 superclass,讓 subclass 去實做細節,這就是 Design pattern 裡的 Template method。
沒有留言:
張貼留言