gpt4 book ai didi

java - 使用哪种设计模式(主动和被动方法)?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:38:29 26 4
gpt4 key购买 nike

我有一个可以喂或砍播放器

下面是我写的类:

public class Dog {

private int health;

public void feed(Food food){
health = health + food.getNutritionalValue();
}
}

public class Player{

public void feed(Dog dog, Food food) {
dog.feed(food);
}

PlayerDog 都有“active” 的方法。

玩家喂狗,狗开始吃食物(我不确定以这种方式耦合方法是否好)。

另一方面,我有玩家可以砍树。

公共(public)类播放器{

public void chop(Tree tree) {
//At this point I am not sure
}

我不确定我是否会使用 Tree 类的 getterssetters 来与树交互。

或者,如果我应该为此编写一个自己的方法,因为树被砍掉了,所以我会调用它。

所以,最终会有两种或更多种实现方式,但我想到的两种是:

tree.setAmountofWood = x

tree.gettingChopped(Damage int)

我想我应该为这个切碎过程制定一个自己的方法。

或者有什么设计原则是我应该遵循的?

最佳答案

我在这里看到 3 个原则,

  1. SRP - 树有责任被砍倒并倒下,但砍倒是人的责任!
  2. Demeter 定律 - 从我的 POV 来看很不错。
  3. OCP - 树木在被砍伐时必须能够执行进一步的操作。

所以你必须使用

tree.gettingChopped(Damage damage)

您的代码:

  1. 方法Dog.feed 是错误的,重命名为Dog.eat 因为Dog 没有喂食,狗正在吃东西。顺便说一句,食物必须降低其营养值(value)
  2. 健康是一个整数值,这很糟糕,因为在现实中没有什么比得上数字健康了。我们可能有一个以百分比为单位的残缺数值,但这更多的是一个不能为负值的字节。您应该为 Health 创建一个自定义类!通过这种方式,您的代码是开放的 (OCP) 扩展,例如被毒化或抑制。

关于java - 使用哪种设计模式(主动和被动方法)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37524545/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com