чрезмерная зависимость от одного arrayList - PullRequest
0 голосов
/ 20 марта 2020
public class InventorySetDAO{
    public LinkedList<CustomInventory> inventories = new LinkedList<>();           
}

Я разрабатываю плагин, который добавляет / удаляет данные в arraylist. и слишком много ссылок на arrayList из другого класса.

Класс InventoryItemModifier:

public class InventoryItemModifier {
InventorySetDAO inventorySetDAO;

public InventoryItemModifier(InventorySetDAO inventorySetDAO){
    this.inventorySetDAO = inventorySetDAO;
}

public void addItem(ItemStack itemStack, ClickAction click, RequiredItems requiredItems) {
    Bukkit.getPluginManager().callEvent(new ItemAddedEvent());

    inventorySetDAO.getLastInventory().addItem(itemStack, click, requiredItems);
}

public void removeItem(ItemStack itemStack){
    Bukkit.getPluginManager().callEvent(new ItemRemovedEvent());

    inventorySetDAO.getLastInventory().removeItem(itemStack);
}

}

Класс InventoryPlayerAccessor:

public class InventoryPlayerAccessor {
InventorySetDAO inventorySetDAO;

public boolean openPage(Player player) {
    if (!inventories.isEmpty()) {
        inventories.get(0).openInventory(player);
        return true;
    }
    return false;
}

public boolean openPage(Player player, int index) {
    if (!inventories.isEmpty()) {
        if (index >= 0 && index < inventories.size()) {
            inventories.get(index).openInventory(player);
            return true;
        }
    }
    return false;
}

}

Я думаю, что существует риск неуместного манипулирования arrayList, поэтому я думаю, что arrayList должен быть в классе и предоставлять методы (add / insert / remove ...), но если в этом классе слишком много обязанностей.

Я пытался разделить их на несколько классов, но, похоже, эта проблема не решается. Есть ли способ уменьшить зависимость от arrayList или эффективный способ инкапсуляции arrayList?

1 Ответ

0 голосов
/ 20 марта 2020

Чтобы уменьшить зависимость каждого класса от базового ArrayList (или просто List), вы можете подумать об использовании составного шаблона вместо шаблона DAO. Это скрыло бы все / большую часть логи c для класса InventorySet.

class InventorySet {

    private final List<CustomInventory> inventories = new ArrayList<>();

    public void addItem() { }

    public void removeItem() { }  

}

Затем вы можете просто оставить свой InventoryPlayerAccessor (возможно, переименовать), но составить его из InventorySet для быстрого доступа.

class InventorySetView {

    void open();

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...