我有一个对象列表,这些对象从不同的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”方法吗?