設計模式使用例項(5)——建造者模式例項之資料庫連線管理
要理解建造者模式,首先要理解農民工建築模式。
農民工建築模式就是靠經驗,對怎麼蓋這個屋子心裡大體有個數,優點就是自由靈活成本低,效果就是你很難掌控其中的每一個環節。比如戶外施工前必須先安裝防塵網和保護施工人員的攔網,這個基本規定都有可能無法落實。
建造者模式就厲害了,首先是制度化運營,必須得有個人現場指揮,這個人非常瞭解建造流程,而且要求所有施工人員必須按照流程來。這樣肯定成本高了點,畢竟至少多了一個人要給他發工資,但是確實在規範性、安全性方面得到提高。
在我們日常的專案中,有一個事情跟這個模型很像,就是資料庫連線物件的建立。
按照正常流程就是:
//mysql
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://127.0.0.1:3306/test";
String name = "root";
String pwd = "root";
conn = DriverManager.getConnection(url,name ,pwd);
//oracle
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:@//127.0.0.1:1521/orcl";
String name = "root";
String pwd = "root";
conn = DriverManager.getConnection(url,name ,pwd);
如果中間少了哪一步,比如name忘了賦值,這個可能就要有問題了。而且流程高度相似,完全可以請一個專業人員來管控這個流程。此處用建造者模式來改造上述流程。
OK,首先我們確定我們建造的物件是Connection,建造行為可定義為ConnectionBuilder抽象類,因為不管什麼Connection建造都是可以由這個抽象類描述的:
/**
* 建造行為介面
*/
public abstract class ConnectionBuilder {
protected String driver;
protected String url;
protected String name;
protected String password;
public abstract void buildDriver();
public abstract void buildUrl();
public abstract void buildName();
public abstract void buildPassword();
public abstract Connection createConnection() throws Exception;
}
然後我們請一個指揮官,這個指揮官非常瞭解Connection建造流程,只要他出手,必按流程走:
/**
* 建造指揮官
*/
public class ConnectionDirector {
public Connection construct(ConnectionBuilder builder) throws Exception {
builder.buildDriver();
builder.buildUrl();
builder.buildName();
builder.buildPassword();
return builder.createConnection();
}
}
然後來了個具體的建造任務,是要建造一個Mysql的連線物件,而且任務清單也出來了:
public class MysqlConnectionBuilder extends ConnectionBuilder {
//每個方法表示建造過程中一個步驟/任務
@Override
public void buildDriver() {
this.driver = "com.mysql.jdbc.Driver";
}
@Override
public void buildUrl() {
this.url = "jdbc:mysql://127.0.0.1:3306/test";
}
@Override
public void buildName() {
this.name = "root";
}
@Override
public void buildPassword() {
this.password = "root";
}
@Override
public Connection createConnection() throws Exception {
Class.forName(this.driver);
return DriverManager.getConnection(url, name, password);
}
}
OK,此時如果我們自己建,比如直接呼叫createConnection,就會忽略流程,可能有問題。
所以我們利用建造者模式,請指揮官來建:
public static void main(String[] args) throws Exception {
ConnectionDirector director=new ConnectionDirector();
Connection mysqlCon=director.construct(new MysqlConnectionBuilder());
}
用了指揮官之後,看似麻煩了,實際可擴充性更好了,比如再來個oracle、sqlserver資料庫,照樣給你建了,而且保證正確。
實際上設計模式就是透過語法的一些限制,保證一些事情的安全順利執行。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/855/viewspace-2812868/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 設計模式例項程式碼設計模式
- 設計模式:命令模式(Command Pattern)及例項設計模式
- 深入理解建造者模式 ——組裝複雜的例項模式
- 設計模式之【建造者模式】設計模式
- 設計模式之建造者模式設計模式
- 策略模式例項模式
- golang設計模式之建造者模式Golang設計模式
- 設計模式之建造者模式(BuilderPattern)設計模式UI
- 達夢資料庫例項的狀態和模式資料庫模式
- C++設計模式+例項視訊教程C++設計模式
- 設計模式 - 原則及例項講解設計模式
- 設計模式例項講解 - 里氏替換設計模式
- 設計模式例項講解 - 介面隔離設計模式
- 設計模式例項講解 - 依賴倒置設計模式
- JDBC連線MySQL資料庫的方法和例項JDBCMySql資料庫
- Java設計模式之(三)——建造者模式Java設計模式
- 設計模式之單例模式設計模式單例
- 設計模式之☞單例模式設計模式單例
- 設計模式之---單例模式設計模式單例
- Javaweb的例項--訂單管理系統--設計資料庫JavaWeb資料庫
- 設計模式之單例設計模式設計模式單例
- 設計模式----建造者模式設計模式
- 設計模式(建造者模式)設計模式
- 設計模式 | 建造者模式設計模式
- 設計模式 --建造者模式設計模式
- 設計模式-建造者模式設計模式
- 設計模式 —— 建造者模式設計模式
- 設計模式例項講解 - 開放封閉設計模式
- 折騰Java設計模式之建造者模式Java設計模式
- 嘻哈說:設計模式之建造者模式設計模式
- 設計模式 --建類神器之建造者模式設計模式
- 使用Eclipse連線SAP雲平臺上的HANA資料庫例項Eclipse資料庫
- Javascript設計模式之單例模式JavaScript設計模式單例
- PHP 設計模式之——單例模式PHP設計模式單例
- golang設計模式之單例模式Golang設計模式單例
- js設計模式之單例模式JS設計模式單例
- Javascript 設計模式之單例模式JavaScript設計模式單例
- PHP 設計模式之單例模式PHP設計模式單例