我在Stack Overflow上搜索了与这个主题相关的信息。我找到了以下解决方案:访问者设计模式的解释。
现在,我的情况与此类似。然而,我需要避免使用 "
我有一个名为
下面是一个使用
我创建的是一个为访问每个塔的访客所设计的类:
现在,我的情况与此类似。然而,我需要避免使用 "
instanceOf
"。我有一个名为
MonkeyTower
、CannonTower
、OctoTower
等的塔的游戏... 一些其他类使用instanceOf
进行比较。下面是一个使用
instanceOf
的类的示例:
BloonsTower.java
public void mousePressed(Point p) {
Tower t = null;
selectedTower = towerInfo[ insertTowerIdx ].getTower();
if( selectedTower instanceof MonkeyTower )
t = tCreator.createMonkey();
else if( selectedTower instanceof OctoTower )
t = tCreator.createOctogonal();
else if( selectedTower instanceof CannonTower )
t = tCreator.createCannon();
else if( selectedTower instanceof MortarTower )
t = tCreator.createMortar();
setMoney( money - towerInfo[ insertTowerIdx ].getPrice() );
t.setPosition( p );
world.addTower(t);
currentState = new SelectTowerState();
}
ManipulatorCreator.java
if( t instanceof MonkeyTower )
return null;
else if( t instanceof OctoTower )
return new OctoManipulator( t );
else if( t instanceof CannonTower )
return null;
else if( t instanceof MortarTower )
return new MortarManipulator( (MortarTower)t );
return man;
而 GameWriter:
public void saveFile( File file, int round, int money, int lives, World m ) throws IOException {
PrintWriter out = new PrintWriter( new BufferedWriter( new FileWriter( file) ) );
out.println( round );
out.println( money );
out.println( lives );
Tower []torres = m.getTowers();
out.println( torres.length ); // escrever o nº de torres
for( Tower t : torres ){
Point p = t.getComponent().getPosicao();
// escrever a posição e o tipo de torre
out.print(p.x+"\t" + p.y+"\t" );
if( t instanceof MonkeyTower )
out.println( "macaco" );
else if( t instanceof OctoTower )
out.println( "octo" );
else if( t instanceof CannonTower )
out.println( "canhao" );
else if( t instanceof MortarTower )
out.println( "morteiro" );
}
out.close();
}
我创建的是一个为访问每个塔的访客所设计的类:
public class TowerVisitor implements Visitor{
public void visit(MonkeyTower monkey) {
// TODO Auto-generated method stub
}
public void visit(CannonTower cannon) {
// TODO Auto-generated method stub
}
public void visit(MortarTower mortar) {
// TODO Auto-generated method stub
}
public void visit(OctoTower octo) {
// TODO Auto-generated method stub
}
}
在我创建的每个塔中,都有一个名为accept
的方法,它返回它自己。
现在,我困在了如何填写visit
方法以及如何使用模式来切换所有的instanceOf
之间。
谢谢。
Tower.createTower()
,Tower.createManipulator()
等呢?请你翻译此段内容。 - shmosel