Java:方法的重复

mmg*_*o27 2 java oop class

这感觉就像这样一个基本问题,但这对我来说都是新的:

我有一个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方法.

什么是停止复制的最佳方法?提前致谢!

dka*_*zel 7

你是对的.制作单独的库存类将是一个很好的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).我认为这会违反得墨忒耳法则