<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國際加速解決方案。 廣告
                # 實現對象的復用——享元模式(四) 14.5 帶外部狀態的解決方案 Sunny軟件公司開發人員通過對圍棋棋子進行進一步分析,發現雖然黑色棋子和白色棋子可以共享,但是它們將顯示在棋盤的不同位置,如何讓相同的黑子或者白子能夠多次重復顯示且位于一個棋盤的不同地方?解決方法就是將棋子的位置定義為棋子的一個外部狀態,在需要時再進行設置。因此,我們在圖14-4中增加了一個新的類Coordinates(坐標類),用于存儲每一個棋子的位置,修改之后的結構圖如圖14-5所示: ![](http://my.csdn.net/uploads/201206/15/1339772313_4533.jpg) 圖14-5 引入外部狀態之后的圍棋棋子結構圖 在圖14-5中,除了增加一個坐標類Coordinates以外,抽象享元類IgoChessman中的display()方法也將對應增加一個Coordinates類型的參數,用于在顯示棋子時指定其坐標,Coordinates類和修改之后的IgoChessman類的代碼如下所示: ``` //坐標類:外部狀態類 class Coordinates { private int x; private int y; public Coordinates(int x,int y) { this.x = x; this.y = y; } public int getX() { return this.x; } public void setX(int x) { this.x = x; } public int getY() { return this.y; } public void setY(int y) { this.y = y; } } //圍棋棋子類:抽象享元類 abstract class IgoChessman { public abstract String getColor(); public void display(Coordinates coord){ System.out.println("棋子顏色:" + this.getColor() + ",棋子位置:" + coord.getX() + "," + coord.getY() ); } } ``` 客戶端測試代碼修改如下: ``` 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(new Coordinates(1,2)); black2.display(new Coordinates(3,4)); black3.display(new Coordinates(1,3)); white1.display(new Coordinates(2,5)); white2.display(new Coordinates(2,4)); } } ``` 編譯并運行程序,輸出結果如下: ``` 判斷兩顆黑子是否相同:true 判斷兩顆白子是否相同:true 棋子顏色:黑色,棋子位置:1,2 棋子顏色:黑色,棋子位置:3,4 棋子顏色:黑色,棋子位置:1,3 棋子顏色:白色,棋子位置:2,5 棋子顏色:白色,棋子位置:2,4 ``` 從輸出結果可以看到,在每次調用display()方法時,都設置了不同的外部狀態——坐標值,因此相同的棋子對象雖然具有相同的顏色,但是它們的坐標值不同,將顯示在棋盤的不同位置。
                  <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>

                              哎呀哎呀视频在线观看