Saya memiliki beberapa antarmuka yang saya maksudkan untuk diimplementasikan oleh pihak ketiga di masa depan, dan saya sendiri menyediakan basis implementasi. Saya hanya akan menggunakan pasangan untuk menunjukkan contoh.
Saat ini, mereka didefinisikan sebagai
Barang:
public interface Item {
String getId();
String getName();
}
ItemStack:
public interface ItemStackFactory {
ItemStack createItemStack(Item item, int quantity);
}
ItemStackContainer:
public interface ItemStackContainer {
default void add(ItemStack stack) {
add(stack, 1);
}
void add(ItemStack stack, int quantity);
}
Sekarang, Item
dan ItemStackFactory
saya benar-benar dapat melihat beberapa pihak ketiga yang perlu memperpanjangnya di masa depan. ItemStackContainer
juga dapat diperluas di masa mendatang, tetapi tidak dengan cara yang dapat saya ramalkan, di luar implementasi default yang disediakan.
Sekarang, saya mencoba membuat perpustakaan ini sekuat mungkin; ini masih dalam tahap awal (pra-pra-alfa) sehingga ini mungkin merupakan tindakan rekayasa berlebihan (YAGNI). Apakah ini tempat yang tepat untuk menggunakan obat generik?
public interface ItemStack<T extends Item> {
T getItem();
int getQuantity();
}
Dan
public interface ItemStackFactory<T extends ItemStack<I extends Item>> {
T createItemStack(I item, int quantity);
}
Saya khawatir hal ini akan membuat implementasi dan penggunaan menjadi lebih sulit untuk dibaca dan dipahami; Saya pikir itu adalah rekomendasi untuk menghindari obat generik bersarang sedapat mungkin.