这感觉就像这样一个基本问题,但这对我来说都是新的:
我有一个Person和Room类,它们都有Item对象列表.
public class Person{
private ArrayList<Item> items;
public Person() {
items = new ArrayList<>();
}
public void addItem(){
...
}
public void removeItem(){
...
}
}
public class Room {
private ArrayList<Item> items;
public Room () {
items = new ArrayList<>();
}
public void addItem(){
...
}
public void removeItem(){
...
}
}
Run Code Online (Sandbox Code Playgroud)
项目方法,例如addItem()在Room类和Person类中都是重复的,这不是很好.我想要制作一个单独的库存类,其中包含项目和项目方法的列表,然后每个房间和人员都有一个库存.
但是如果我使用私人库存字段,那么我将无法从人员或房间调用Item方法.
什么是停止复制的最佳方法?提前致谢!
你是对的.制作单独的库存类将是一个很好的OOP设计.
我很高兴你没有说要创建一个父类Room,Person因为虽然这样可以节省你的重复,但是Rooms和Person没有关联,所以他们也不应该在面向对象的意义上真正相关.
您可以使用委派将添加/删除项目委派给您的Inventory字段.
public class Room {
private Inventory inventory = new Inventory();
public void addItem(Item item) {
inventory.addItem(item);
}
public void removeItem(Item item) {
inventory.removeItem(item);
}
}
Run Code Online (Sandbox Code Playgroud)
编辑
有些人建议公开库存,然后在其上设置公共添加/删除方法person.getInventory().addItem(item).我认为这会违反得墨忒耳法则