<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 確保對象的唯一性——單例模式 (二) 3.3 負載均衡器的設計與實現 Sunny軟件公司承接了一個服務器負載均衡(Load Balance)軟件的開發工作,該軟件運行在一臺負載均衡服務器上,可以將并發訪問和數據流量分發到服務器集群中的多臺設備上進行并發處理,提高系統的整體處理能力,縮短響應時間。由于集群中的服務器需要動態刪減,且客戶端請求需要統一分發,因此需要確保負載均衡器的唯一性,只能有一個負載均衡器來負責服務器的管理和請求的分發,否則將會帶來服務器狀態的不一致以及請求分配沖突等問題。如何確保負載均衡器的唯一性是該軟件成功的關鍵。 Sunny公司開發人員通過分析和權衡,決定使用單例模式來設計該負載均衡器,結構圖如圖3-3所示: ![](http://my.csdn.net/uploads/201204/02/1333305551_9779.gif) 在圖3-3中,將負載均衡器LoadBalancer設計為單例類,其中包含一個存儲服務器信息的集合serverList,每次在serverList中隨機選擇一臺服務器來響應客戶端的請求,實現代碼如下所示: ``` import java.util.*; //負載均衡器LoadBalancer:單例類,真實環境下該類將非常復雜,包括大量初始化的工作和業務方法,考慮到代碼的可讀性和易理解性,只列出部分與模式相關的核心代碼 class LoadBalancer { //私有靜態成員變量,存儲唯一實例 private static LoadBalancer instance = null; //服務器集合 private List serverList = null; //私有構造函數 private LoadBalancer() { serverList = new ArrayList(); } //公有靜態成員方法,返回唯一實例 public static LoadBalancer getLoadBalancer() { if (instance == null) { instance = new LoadBalancer(); } return instance; } //增加服務器 public void addServer(String server) { serverList.add(server); } //刪除服務器 public void removeServer(String server) { serverList.remove(server); } //使用Random類隨機獲取服務器 public String getServer() { Random random = new Random(); int i = random.nextInt(serverList.size()); return (String)serverList.get(i); } } ``` 編寫如下客戶端測試代碼: ``` class Client { public static void main(String args[]) { //創建四個LoadBalancer對象 LoadBalancer balancer1,balancer2,balancer3,balancer4; balancer1 = LoadBalancer.getLoadBalancer(); balancer2 = LoadBalancer.getLoadBalancer(); balancer3 = LoadBalancer.getLoadBalancer(); balancer4 = LoadBalancer.getLoadBalancer(); //判斷服務器負載均衡器是否相同 if (balancer1 == balancer2 && balancer2 == balancer3 && balancer3 == balancer4) { System.out.println("服務器負載均衡器具有唯一性!"); } //增加服務器 balancer1.addServer("Server 1"); balancer1.addServer("Server 2"); balancer1.addServer("Server 3"); balancer1.addServer("Server 4"); //模擬客戶端請求的分發 for (int i = 0; i < 10; i++) { String server = balancer1.getServer(); System.out.println("分發請求至服務器: " + server); } } } ``` 編譯并運行程序,輸出結果如下: 服務器負載均衡器具有唯一性! ``` 分發請求至服務器: Server 1 分發請求至服務器: Server 3 分發請求至服務器: Server 4 分發請求至服務器: Server 2 分發請求至服務器: Server 3 分發請求至服務器: Server 2 分發請求至服務器: Server 3 分發請求至服務器: Server 4 分發請求至服務器: Server 4 分發請求至服務器: Server 1 ``` 雖然創建了四個LoadBalancer對象,但是它們實際上是同一個對象,因此,通過使用單例模式可以確保LoadBalancer對象的唯一性。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看