Ситуация следующая:
У нас есть игра, в которой есть игроки и предметы. Игра выиграна, когда у игрока есть все 3 указанных c предмета в его инвентаре и он их собирает (на карте есть только 1 из них). Элементы имеют очень простой интерфейс, игрок может вызвать на них use()
. Существуют другие классы, реализующие интерфейс Item
, которые были исключены из фрагмента. Если бы я игнорировал основные принципы c OOP, я мог бы просто сказать, что когда игрок использует один из них, мы перебираем инвентарь игрока и проверяем, есть ли в нем все 3 из этих указанных c типов предметов. Как мне избежать этого?
public interface Item{
public void use();
}
public class SpecificItem1 implements Item{
public void use(){...}
}
public class SpecificItem2 implements Item{
public void use(){...}
}
public class SpecificItem3 implements Item{
public void use(){...}
}
public class Player{
ArrayList<Item> inventory;
public void didWeWin() {
int numOfSItems = 0;
for(Item i : inventory) {
if(i instanceOf SpecificItem1)
numOfSItems++;
if(i instanceOf SpecificItem2)
numOfSItems++;
if(i instanceOf SpecificItem3)
numOfSItems++;
}
if(numOfSItems == 3)
win();
}
}