通過單例模式模擬RAC連線
單例模式基本是學習設計模式的第一個模式,而且在工作中使用太普遍了,通用到我們感覺就應該是這樣,但是如果真給你紙和筆,在5分鐘內寫出一個完整的單例模式,估計還是有不少人會中招。
RAC是實時應用叢集,是oracle的一種高可用方案,假設我們有2個節點,如果其中一個節點出現問題,另外一個節點依然能夠正常工作,對於客戶端來說感覺是完全透明的,感覺不到任何的異常。
我們今天來通過設計模式的單例模式來模擬一下RAC連線的情況
首先是單例模式,一般都是認為一個類可以產生一個物件,如果物件的數量不收限制,也是可以實現的,這個就是單例模式的擴充套件。
我嘗試寫了如下的程式碼,模擬兩個節點的情況
這樣,我們定義了兩個節點,在初始化的時候指定getInstance()方法,然後在每次呼叫的時候都只初始化一次。
當然從客戶端來說為了能夠更加清晰表達出連線節點的隨機性,我寫了一個迴圈,一次迴圈200次,列印出連線的情況,通過資料更能夠說明。可以從初始化的兩個物件的地址看到只有兩個物件。
rac instance 1 RacTest@42e816
rac instance 1 RacTest@42e816
rac instance 1 RacTest@42e816
rac instance 2 RacTest@9304b1
rac instance 1 RacTest@42e816
rac instance 1 RacTest@42e816
rac instance 2 RacTest@9304b1
rac instance 2 RacTest@9304b1
rac instance 1 RacTest@42e816
rac instance 2 RacTest@9304b1
rac instance 1 RacTest@42e816
rac instance 2 RacTest@9304b1
rac instance 2 RacTest@9304b1
rac instance 1 RacTest@42e816
rac instance 2 RacTest@9304b1
rac instance 1 RacTest@42e816
rac instance 1 RacTest@42e816
rac instance 1 RacTest@42e816
rac instance 1 RacTest@42e816
rac instance 2 RacTest@9304b1
RAC是實時應用叢集,是oracle的一種高可用方案,假設我們有2個節點,如果其中一個節點出現問題,另外一個節點依然能夠正常工作,對於客戶端來說感覺是完全透明的,感覺不到任何的異常。
我們今天來通過設計模式的單例模式來模擬一下RAC連線的情況
首先是單例模式,一般都是認為一個類可以產生一個物件,如果物件的數量不收限制,也是可以實現的,這個就是單例模式的擴充套件。
我嘗試寫了如下的程式碼,模擬兩個節點的情況
點選(此處)摺疊或開啟
-
import java.util.ArrayList;
public class RacTest {
private static final RacTest rac1= new RacTest();
private static final RacTest rac2= new RacTest();
private final static ArrayListracNodes = new ArrayList ();
private RacTest(){}
public static RacTest getInstance(){
int i = (int)(1+Math.random()*2)-1;
if(racNodes.size()==0){
racNodes.add(rac1);
racNodes.add(rac2);
}
System.out.println("rac instance "+(i+1)+" "+racNodes.get(i));
return racNodes.get(i);
}
public static void main(String[] args){
for(int i=0;i<20;i++){
RacTest.getInstance();
}
}
}
這樣,我們定義了兩個節點,在初始化的時候指定getInstance()方法,然後在每次呼叫的時候都只初始化一次。
當然從客戶端來說為了能夠更加清晰表達出連線節點的隨機性,我寫了一個迴圈,一次迴圈200次,列印出連線的情況,通過資料更能夠說明。可以從初始化的兩個物件的地址看到只有兩個物件。
rac instance 1 RacTest@42e816
rac instance 1 RacTest@42e816
rac instance 1 RacTest@42e816
rac instance 2 RacTest@9304b1
rac instance 1 RacTest@42e816
rac instance 1 RacTest@42e816
rac instance 2 RacTest@9304b1
rac instance 2 RacTest@9304b1
rac instance 1 RacTest@42e816
rac instance 2 RacTest@9304b1
rac instance 1 RacTest@42e816
rac instance 2 RacTest@9304b1
rac instance 2 RacTest@9304b1
rac instance 1 RacTest@42e816
rac instance 2 RacTest@9304b1
rac instance 1 RacTest@42e816
rac instance 1 RacTest@42e816
rac instance 1 RacTest@42e816
rac instance 1 RacTest@42e816
rac instance 2 RacTest@9304b1
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-1462122/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle單例項通過dataguard遷移到RAC 轉Oracle單例
- 連線RAC資料庫中單個例項(一)資料庫
- 連線RAC資料庫中單個例項(二)資料庫
- 通過session模擬登陸Session
- 【JDBC】java連線池模擬測試 連線oracleJDBCJavaOracle
- PHP單例模式模擬Java Bean實現方法示例詳解PHP單例模式JavaBean
- Oracle 11g RAC 配置單例項 DataGuard(通過 DUPLICATE 方式)Oracle單例
- Oracle 11g RAC通過SCAN IP連線資料庫 - JDBC連線串問題Oracle資料庫JDBC
- mysql 通過IP連線MySql
- 陣列模擬單連結串列陣列
- charles手機模擬器的連線
- HBuilder 連線 夜神安卓模擬器UI安卓
- Java模擬.NET的連線池 (轉)Java
- Laravel 通過 ODBC 連線 VerticaLaravel
- 通過跳板機連線MySQLMySql
- js模擬點選連結程式碼例項JS
- oracle連線SQLserver--通過ODBCOracleSQLServer
- 單例模式在JDBC資料庫連線操作裡的應用單例模式JDBC資料庫
- VMWARE虛擬機器的Ubuntu通過橋接方式連線主機虛擬機Ubuntu橋接
- 模擬實現連結title效果程式碼例項
- 模擬select下拉選單程式碼例項
- Windows平臺模擬單例項ASM環境Windows單例ASM
- jdbc連rac範例JDBC
- 通過cman連線報ora-12564拒絕連線
- Android Studio與夜神模擬器連線Android
- 模擬美化select下拉選單程式碼例項
- 華為模擬器ensp的路由配置以及連通測試路由
- 模擬11G單例項到12C的資料遷移過程單例
- jdbc 連線 oracle racJDBCOracle
- 【JDBC】java連線池模擬測試連線Oracle資料庫指令碼參考JDBCJavaOracle資料庫指令碼
- 陣列模擬單連結串列你會了嗎?陣列
- Linux下如何通過命令連線wifiLinuxWiFi
- 通過外來鍵連線多個表
- 通過驅動建立與MySQL的連線MySql
- 通過因特網連線Beaglebone Black
- 通過vnc連線linux伺服器VNCLinux伺服器
- 單例模式單例模式
- javascript模擬實現連結的title效果例項程式碼JavaScript