實現物件的復用 享元模式(四)

2021-06-07 04:14:33 字數 1156 閱讀 9871

sunny軟體公司開發人員通過對圍棋棋子進行進一步分析,發現雖然黑色棋子和白色棋子可以共享,但是它們將顯示在棋盤的不同位置,如何讓相同的黑子或者白子能夠多次重複顯示且位於乙個棋盤的不同地方?解決方法就是將棋子的位置定義為棋子的乙個外部狀態,在需要時再進行設定。因此,我們在圖14-4中增加了乙個新的類coordinates(座標類),用於儲存每乙個棋子的位置,修改之後的結構圖如圖14-5所示:

圖14-5 引入外部狀態之後的圍棋棋子結構圖

在圖14-5中,除了增加乙個座標類coordinates以外,抽象享元類igochessman中的display()方法也將對應增加乙個coordinates型別的引數,用於在顯示棋子時指定其座標,coordinates類和修改之後的igochessman類的**如下所示:

//座標類:外部狀態類

class coordinates

public int getx()

public void setx(int x)

public int gety()

public void sety(int y)

} //圍棋棋子類:抽象享元類

abstract class igochessman

}

客戶端測試**修改如下:

class client 

}

編譯並執行程式,輸出結果如下:

判斷兩顆黑子是否相同:true

判斷兩顆白子是否相同:true

棋子顏色:黑色,棋子位置:1,2

棋子顏色:黑色,棋子位置:3,4

棋子顏色:黑色,棋子位置:1,3

棋子顏色:白色,棋子位置:2,5

棋子顏色:白色,棋子位置:2,4

從輸出結果可以看到,在每次呼叫display()方法時,都設定了不同的外部狀態——座標值,因此相同的棋子物件雖然具有相同的顏色,但是它們的座標值不同,將顯示在棋盤的不同位置。

實現物件的復用 享元模式(四)

sunny軟體公司開發人員通過對圍棋棋子進行進一步分析,發現雖然黑色棋子和白色棋子可以共享,但是它們將顯示在棋盤的不同位置,如何讓相同的黑子或者白子能夠多次重複顯示且位於乙個棋盤的不同地方?解決方法就是將棋子的位置定義為棋子的乙個外部狀態,在需要時再進行設定。因此,我們在圖14 4中增加了乙個新的類...

享元模式 物件的復用

享元模式,通過共享物件的方式有效地支援大量細粒度的物件。1 先看下這個模式點關鍵點 物件池 該模式的最大特點就是實現物件的快取,以避免物件的重複建立,從而達到提公升效能和記憶體使用優化的目的 狀態外部化 為實現該模式,另外的乙個特點就是狀態外部化,以方便快取物件的訪問。2 我們再來看下它的類圖關係 ...

實現物件的復用 享元模式(二)

分享一下我老師大神的人工智慧教程。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智慧的隊伍中來!享元模式結構較為複雜,一般結合工廠模式一起使用,在它的結構圖中包含了乙個享元工廠類,其結構圖如圖14 3所示 圖14 3 享元模式結構圖 在享元模式結構圖中包含如下幾個角色 flyweig...