設計模式使用例項(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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Net設計模式例項之裝飾者模式(Decorator Pattern)設計模式
- 設計模式綜合例項分析之資料庫同步系統(二)設計模式資料庫
- 資料庫–如何連線RDS例項,使用雲資料庫?資料庫
- 資料庫設計例項資料庫
- 設計模式之建造者模式設計模式
- 設計模式之【建造者模式】設計模式
- 設計模式例項程式碼設計模式
- 深入理解建造者模式 ——組裝複雜的例項模式
- JDBC連線自定義sqlserver資料庫例項名(多個例項)JDBCSQLServer資料庫
- Python設計模式之"外觀模式"例項講解Python設計模式
- golang設計模式之建造者模式Golang設計模式
- JAVA設計模式之建造者模式Java設計模式
- 設計模式系列之「建造者模式」設計模式
- 設計模式之-建造者模式-Builder設計模式UI
- .Net設計模式例項詳解設計模式
- AngularJS中介者模式例項AngularJS模式
- 設計模式之建造者模式(BuilderPattern)設計模式UI
- Java設計模式之(三)——建造者模式Java設計模式
- 23種設計模式之--建造者模式設計模式
- 23種設計模式之建造者模式設計模式
- Java設計模式之建造者模式(Builder)Java設計模式UI
- 策略模式例項模式
- 設計模式-建造者模式設計模式
- 設計模式 --建造者模式設計模式
- 設計模式----建造者模式設計模式
- 設計模式 —— 建造者模式設計模式
- 設計模式(建造者模式)設計模式
- 設計模式 | 建造者模式設計模式
- 設計模式(5)-建造者模式詳解(易懂)設計模式
- WMB 使用Compute節點連線Oracle資料庫例項Oracle資料庫
- Net設計模式例項之備忘錄模式(Memento Pattern)(2)設計模式
- 達夢資料庫例項的狀態和模式資料庫模式
- OCP課程26:管理Ⅰ之管理資料庫例項資料庫
- JDBC連線MySQL資料庫的方法和例項JDBCMySql資料庫
- 連線RAC資料庫中單個例項(一)資料庫
- 連線RAC資料庫中單個例項(二)資料庫
- Java連線各種資料庫的例項 (轉)Java資料庫
- android常用設計模式之建造者設計模式Android設計模式