簡述
提取演算法中不變的部分封裝成方法,變化的部分延遲到子類,
延遲到子類
這個說法在學習設計模式的時候經常出現,實際就是利用多型在子類中重寫方法,使得實行時根據實體的型別呼叫不同的方法,
話不多說,看個案例,
優化案例
最初版v0
連接資料庫我們有很多種方式,JDBC、JNDI、ODBC等等,下面是不使用設計模式模擬使用三種方式實作連接資料庫,
public class Client {
public static void main(String[] args) {
JDBC jdbc = new JDBC();
jdbc.execute(); // 使用jdbc連接資料庫
JNDI jndi = new JNDI();
jndi.execute(); // 使用jndi連接資料庫
ODBC odbc = new ODBC();
odbc.execute(); // 使用odbc連接資料庫
}
}
public class JDBC {
public void execute() {
System.out.println("讀取資料庫鏈接組態檔");
System.out.println("使用JDBC建立資料庫鏈接,,,");
System.out.println("資料庫鏈接成功");
}
}
public class ODBC {
public void execute() {
System.out.println("讀取資料庫鏈接組態檔");
System.out.println("使用ODBC建立資料庫鏈接,,,");
System.out.println("資料庫鏈接成功");
}
}
public class JNDI {
public void execute() {
System.out.println("讀取資料庫鏈接組態檔");
System.out.println("使用JNDI建立資料庫鏈接,,,");
System.out.println("資料庫鏈接成功");
}
}
可以看出以上代碼中有兩處不變的代碼 --> System.out.println("讀取資料庫鏈接組態檔")、System.out.println("資料庫鏈接成功"),這兩處代碼分別在三個類中重復了三次,案例中只有兩行代碼,問題不大,但是真實專案中可能會存在幾百行代碼完全相同但是到處都有的情況,為了解決這個問題,提高我們開發的效率,并且也能提高bug篩查的效率,我們可以使用模板方法模式,詳細請看以下案例,
能提高bug篩查的效率的原因
如果幾百行的代碼重復出現在十幾個或者幾十個不同的類中,當bug出現在一處代碼時,為了確保系統不再出現同樣的錯誤,需要把剩余所有相同的代碼都檢查一遍,這無疑增加了后期維護的成本,
而使用模板方法模式則可以省去很多花在這類雜活上的時間,
修改版v1
public class Client {
public static void main(String[] args) {
JDBC jdbc = new JDBC();
jdbc.templateExecute(); // 使用jdbc連接資料庫
JNDI jndi = new JNDI();
jndi.templateExecute(); // 使用jndi連接資料庫
ODBC odbc = new ODBC();
odbc.templateExecute(); // 使用odbc連接資料庫
}
}
public abstract class DBConnection {
// 模板方法
public void templateExecute() {
System.out.println("讀取資料庫鏈接組態檔"); // 不變的代碼1
this.execute();
System.out.println("資料庫鏈接成功"); // 不變的代碼2
}
public abstract void execute();
}
public class JDBC extends DBConnection {
public void execute() {
System.out.println("使用JDBC建立資料庫鏈接,,,");
}
}
public class ODBC extends DBConnection {
public void execute() {
System.out.println("使用ODBC建立資料庫鏈接,,,");
}
}
public class JNDI extends DBConnection {
public void execute() {
System.out.println("使用JNDI建立資料庫鏈接,,,");
}
}
就增加一個抽象類和一個模板方法就解決了代碼重復的問題,現在重復的代碼就兩行,所以效果不明顯,如果是幾百行,那效果立竿見影,而且模板方法模式也沒有什么復雜的理念,簡單易懂,悄悄告訴你,模板方法模式在各種框架中都是非常常見的,
總結
優點
- 可以減少專案中大量重復代碼,
- 設計思想簡單(就繼承+多型),易懂,
- 實作簡單,只需要增加一個抽象類,增加一個模板方法即可,
缺點
- 說實話,個人覺得沒啥缺點,要是一個模板方法模式也能增加代碼的閱讀難度的話,還是轉行比較好哈哈哈,
適用場景
- 任何可以明確分清變化與不變化的代碼,
本文來自博客園,作者:spoonb,轉載請注明原文鏈接:https://www.cnblogs.com/spoonb/p/16834395.html
個人主頁:blogcafe.cn 比博客園更新速度更快,歡迎大家的光顧
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/521821.html
標籤:其他
下一篇:golang中的鎖競爭問題
