デザインパターンを使用してマインスイーパゲームを作成しようとしていますが、マインスイーパのタイルに作成パターンを実装するのに問題があります。
マインスイーパには、ナンバータイルとマインタイルの2種類のタイルがあります。数字タイルには、横にある地雷タイルの数に応じて、数字または空白が含まれます。地雷タイルには、タイルにロードする地雷画像が含まれています。
私がこれにアプローチした方法は、タイルにファクトリメソッドを使用しようとすることです。これはJavaの例です。
抽象クラス
public abstract class Tile {
boolean flag = false;
boolean opened = false;
abstract void open();
void flag(){
// business logic
}
boolean checkFlagged(){
return flag;
}
boolean checkOpened(){
return opened;
}
}
NumberTileクラス
public class NumberTile extends Tile {
int number;
@Override
void open(){
// business logic
}
void setNumber(int number){
this.number = number;
}
int getNumber(){
return number;
}
}
MinesTileクラス
public class MinesTile extends Tile {
ImageIcon mineImg;
@Override
void open(){
// business logic
explode();
}
void explode(){
// tell main board to end game
}
}
クライアントコード
Tile numberTile = new NumberTile(); // get and setNumber method will not be accesible
Tile minesTile = new MinesTile(); // explode method will not be accesible
Tile
子クラスのメソッドにアクセスできないようにせずに、同じ抽象データ型を使用するにはどうすればよいですか?
抽象クラスNumberTile
との間ですべてのメソッドを抽象化する場合MinesTile
、それらは使用されないメソッドをオーバーライドする必要があり、遺贈の拒否を引き起こします。
このデザインパターンの問題を解決するにはどうすればよいですか?
これを実際に解決することはできません。多くのバリエーションがあるため、実装しようとしている正確なデザインパターンがわかりません。しかし、これを達成できる唯一の方法はキャストすることです。
Tile someTile = new NumberTile();
if(someTile instanceof NumberTile){
NumberTile numberTile = (NumberTile) someTile;
numberTile.getNumber();
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加