扫雷的设计模式
Design patterns for minesweeper
我正在尝试使用设计模式创建扫雷游戏,但我在为扫雷游戏中的图块实现创建模式时遇到了问题。
在扫雷游戏中,有两种类型的方块,数字方块和地雷方块。数字牌包含一个数字或空白,具体取决于旁边地雷牌的数量。虽然地雷图块包含要加载到图块上的地雷图像。
我的方法是尝试对图块使用工厂方法,这是 java 中的示例。
摘要class
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 class
public class NumberTile extends Tile {
int number;
@Override
void open(){
// business logic
}
void setNumber(int number){
this.number = number;
}
int getNumber(){
return number;
}
}
The MinesTile class
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
数据类型而不使子 class 方法不可访问?
如果我将 NumberTile
和 MinesTile
中的所有方法抽象为抽象 class,那么它们还必须重写不会被使用并导致拒绝的方法遗赠。
如何解决这个设计模式问题?
你无法真正解决这个问题,我不确定你尝试实现的确切设计模式,因为有很多变体。但实现这一目标的唯一方法是铸造。
Tile someTile = new NumberTile();
if(someTile instanceof NumberTile){
NumberTile numberTile = (NumberTile) someTile;
numberTile.getNumber();
}
我正在尝试使用设计模式创建扫雷游戏,但我在为扫雷游戏中的图块实现创建模式时遇到了问题。
在扫雷游戏中,有两种类型的方块,数字方块和地雷方块。数字牌包含一个数字或空白,具体取决于旁边地雷牌的数量。虽然地雷图块包含要加载到图块上的地雷图像。
我的方法是尝试对图块使用工厂方法,这是 java 中的示例。
摘要class
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 class
public class NumberTile extends Tile {
int number;
@Override
void open(){
// business logic
}
void setNumber(int number){
this.number = number;
}
int getNumber(){
return number;
}
}
The MinesTile class
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
数据类型而不使子 class 方法不可访问?
如果我将 NumberTile
和 MinesTile
中的所有方法抽象为抽象 class,那么它们还必须重写不会被使用并导致拒绝的方法遗赠。
如何解决这个设计模式问题?
你无法真正解决这个问题,我不确定你尝试实现的确切设计模式,因为有很多变体。但实现这一目标的唯一方法是铸造。
Tile someTile = new NumberTile();
if(someTile instanceof NumberTile){
NumberTile numberTile = (NumberTile) someTile;
numberTile.getNumber();
}