<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>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 實現對象的復用——享元模式(三) 14.3 完整解決方案 為了節約存儲空間,提高系統性能,Sunny公司開發人員使用享元模式來設計圍棋軟件中的棋子,其基本結構如圖14-4所示: ![](http://my.csdn.net/uploads/201206/15/1339771744_6390.jpg) 圖14-4 圍棋棋子結構圖 在圖14-4中,IgoChessman充當抽象享元類,BlackIgoChessman和WhiteIgoChessman充當具體享元類,IgoChessmanFactory充當享元工廠類。完整代碼如下所示: ``` import java.util.*; //圍棋棋子類:抽象享元類 abstract class IgoChessman { public abstract String getColor(); public void display() { System.out.println("棋子顏色:" + this.getColor()); } } //黑色棋子類:具體享元類 class BlackIgoChessman extends IgoChessman { public String getColor() { return "黑色"; } } //白色棋子類:具體享元類 class WhiteIgoChessman extends IgoChessman { public String getColor() { return "白色"; } } //圍棋棋子工廠類:享元工廠類,使用單例模式進行設計 class IgoChessmanFactory { private static IgoChessmanFactory instance = new IgoChessmanFactory(); private static Hashtable ht; //使用Hashtable來存儲享元對象,充當享元池 private IgoChessmanFactory() { ht = new Hashtable(); IgoChessman black,white; black = new BlackIgoChessman(); ht.put("b",black); white = new WhiteIgoChessman(); ht.put("w",white); } //返回享元工廠類的唯一實例 public static IgoChessmanFactory getInstance() { return instance; } //通過key來獲取存儲在Hashtable中的享元對象 public static IgoChessman getIgoChessman(String color) { return (IgoChessman)ht.get(color); } } ``` 編寫如下客戶端測試代碼: ``` class Client { public static void main(String args[]) { IgoChessman black1,black2,black3,white1,white2; IgoChessmanFactory factory; //獲取享元工廠對象 factory = IgoChessmanFactory.getInstance(); //通過享元工廠獲取三顆黑子 black1 = factory.getIgoChessman("b"); black2 = factory.getIgoChessman("b"); black3 = factory.getIgoChessman("b"); System.out.println("判斷兩顆黑子是否相同:" + (black1==black2)); //通過享元工廠獲取兩顆白子 white1 = factory.getIgoChessman("w"); white2 = factory.getIgoChessman("w"); System.out.println("判斷兩顆白子是否相同:" + (white1==white2)); //顯示棋子 black1.display(); black2.display(); black3.display(); white1.display(); white2.display(); } } ``` 編譯并運行程序,輸出結果如下: ``` 判斷兩顆黑子是否相同:true 判斷兩顆白子是否相同:true 棋子顏色:黑色 棋子顏色:黑色 棋子顏色:黑色 棋子顏色:白色 棋子顏色:白色 ``` 從輸出結果可以看出,雖然我們獲取了三個黑子對象和兩個白子對象,但是它們的內存地址相同,也就是說,它們實際上是同一個對象。在實現享元工廠類時我們使用了單例模式和簡單工廠模式,確保了享元工廠對象的唯一性,并提供工廠方法來向客戶端返回享元對象。
                  <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>

                              哎呀哎呀视频在线观看