- 瘋狂Java實戰演義
- 楊恩雄 麥凱翔編著
- 709字
- 2018-12-27 17:17:01
1.5 棋子枚舉類實現
在某些情況下,一個類的屬性是有限而且固定的,例如本章中的棋子類,它只有兩個對象,黑棋和白棋。這種實例有限而且固定的類,在Java中稱為枚舉類,枚舉類的關鍵字用enum而不是class。此類中有兩個枚舉屬性BLACK和WHITE,代表黑子與白子,代碼實現如下。
代碼清單:code\gobang\src\org\crazyit\gobang\Chessman.java
public enum Chessman { BLACK("●"),WHITE("○"); private String chessman; /** * 私有構造器 */ private Chessman(String chessman) { this.chessman = chessman; } /** * @return 黑棋或者白棋 */ public String getChessman() { return this.chessman; } }
在上面的代碼中,可以看到,枚舉類是用enum關鍵字代替了class關鍵字,此枚舉類的構造器的權限修飾符是private,表明此類是不可以通過外部創建的,只能在此類的內部創建,這是為了保證此對象只有黑子與白子兩種類型。黑體代碼列出了枚舉值,實際上就是調用私用構造器創建此對象,等同于以下代碼:
public static final Chessman BLACK = new Chessman("●"); public static final Chessman WHITE = new Chessman("○");
由于BLACK與WHITE兩個屬性是靜態的,所以要獲取黑子或者白子,可以使用以下代碼:
Chessman.BLACK.getChessman(); Chessman.WHITE.getChessman();
在控制臺中,我們可以使用這種方式來確定棋子的字符串,如果需要在Swing或者其他界面中展示一顆棋子,可能需要為具體的某顆棋子保存相應的棋子圖片,在本章中,由于棋子只是普通的兩個字符串,因此直接寫成枚舉對象即可。
如果你希望你的程序有更好的可擴展性,筆者建議可以根據情況建立棋子接口,并提供白棋與黑棋的實現類,我們在棋盤二維數組中存放的只是某個接口,而不是具體的類,這樣就提高了程序的可擴展性。在本小節的開頭提到:在某些情況下,一個類中的屬性是有限并且固定的。但是在實際的開發情況中(特別是做企業應用),隨著業務的不斷變化,類不可變幾乎是不可能的。舉個例子,如果需要將本章中的五子棋遷移到Swing界面中,那么該棋子枚舉類就不得不更改了。
雖然本章是為了做一個較為簡單的五子棋程序,但更多地是想向大家展現面向對象的思維。