Вместо создания всех этих отдельных методов для watchTV()
или hitWall()
в GameObject
, сделайте GameObject
Abstract
с любыми общими переменными на нем (name
, activatable
, obstacle
,и т. д.) с помощью одного Abstract
метода, называемого doButtonOneActivity()
.
. Затем заставьте другие ваши объекты, такие как TV
или Wall
, расширить GameObject
и переопределите метод doButtonOneActivity()
любым конкретным элементом.будет делать при нажатии.
Теперь ваш класс Game
может просто вызвать doButtonOneActivity()
на GameObject
, и сам объект выяснит, что ему нужно делать, без необходимости вручную управлять этим.
Надеюсь, это поможет!
Игра:
public class Game implements Serializable, IClusterable {
private static final long serialVersionUID = 1L;
private ArrayList<GameObject> gameObjects;
public void actionPerformed(GameObject current) {
// Let the object do whatever it's supposed to do on button press, in either case.
current.doButtonOneActivity();
if(current.isActivatable()){
// Do whatever extra thing you need to do if this one is Activatable...
System.out.println("Hey, this thing is activatable!");
} else if (current.isObstacle()){
// Do something an obstacle needs you to do
System.out.println("Hey, this thing is an obstacle!");
}
}
}
GameObject, который является абстрактным.
public abstract class GameObject implements Serializable, IClusterable {
private static final long serialVersionUID = 1L;
public String name;
private boolean activatable;
private boolean obstacle;
public GameObject(String name, boolean activatable, boolean obstacle) {
super();
this.name = name;
this.activatable = activatable;
this.obstacle = obstacle;
}
public abstract void doButtonOneActivity();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean isActivatable() {
return activatable;
}
public void setActivatable(boolean activatable) {
this.activatable = activatable;
}
public boolean isObstacle() {
return obstacle;
}
public void setObstacle(boolean obstacle) {
this.obstacle = obstacle;
}
}
Телевизор, расширяющий GameObjectи заполняет нужный метод.
public class TV extends GameObject implements Serializable, IClusterable {
private static final long serialVersionUID = 1L;
public TV(String name, boolean activatable, boolean obstacle) {
super(name, activatable, obstacle);
}
@Override
public void doButtonOneActivity() {
if(isActivatable()){
// do whatever I need to do as a TV when I am activated...
}
if (isObstacle()){
// do whatever I need to do as a TV when I am activated as an obstacle...
}
System.out.println("I'm a TV and I was called. My name is: " + getName());
}
}
Стена, которая расширяет GameObject и заполняет необходимый метод.
public class Wall extends GameObject implements Serializable, IClusterable {
private static final long serialVersionUID = 1L;
public Wall(String name, boolean activatable, boolean obstacle) {
super(name, activatable, obstacle);
}
@Override
public void doButtonOneActivity() {
if(isActivatable()){
// do whatever I need to do as a Wall when I am activated...
}
if (isObstacle()){
// do whatever I need to do as a Wall when I am activated as an obstacle...
}
System.out.println("I'm a wall and I was called. My name is: " + getName());
}
}