打破对其他班级某个班级的依赖

时间:2019-05-06 08:04:08

标签: java design-patterns refactoring

我有一个对象列表,这些对象从不同的JSON文件反序列化为Java类。他们中的大多数人只有一个责任-他们拥有从JSON文件反序列化的数据,并向所有需要它的人提供访问这些数据的权限。
其中一些还具有一些在内部实现的逻辑,例如,我有一个实现“ Action”接口的类的列表:

public interface Action {
    boolean canAct(Player player);
    void act(Player player);
}

public class ActionRestoreHealth implements Action {

    @SerializedName("health")
    private int health;

    public int getHealth() {
        return health;
    }

    @Override
    public boolean canAct(Player player) {
        return player.health < player.maxHealth;
    }

    @Override
    public void act(Player player) {
        if(player.health + health < maxHealth)
            player.health += this.health;
        else
            player.health = player.maxHealth;
        player.notifyHealthChanged();
    }

}

现在,我想将所有这些数据类提取到单独的maven模块中,以提供与使用所有数据加载/反序列化逻辑的主要简便方法相关的其他项目。
但是在此数据持有者类中对诸如“ Player”之类的类的依赖不允许我执行此操作。现在,如果要在单独的Maven模块中提取此数据逻辑-我需要向所有调用此逻辑的客户端提供有关Player类的信息。
我认为,当我直接在数据持有者类中实现“动作”之类的接口时,我打破了单一责任原则,并且在数据之间添加了强大的耦合 持有人类别和玩家,这也是不好的做法。
直接从数据持有者类直接执行每个动作非常方便:我不需要了解具体的动作类,只需简单地调用“ canAct”和“ act”方法,但是似乎我实现它的方式并不是最好的选择。

我的问题是:
1)是否有一些最佳实践/设计模式可以打破这种耦合?
2)我可以在某个地方提取Action接口以消除数据持有者对Player类的依赖,仍然可以方便地调用“ canAct”和“ act”方法吗?

0 个答案:

没有答案