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

标签 java oop design-patterns

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

下面是我写的类:

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/

相关文章:

java - 不同路径解析器

java - Spring 3 : @OneToOne unidirectional generate java. sql.SQLException: ORA-00918

objective-c - 使用 alloc init 而不是 new

javascript - 在 javascript 中定义属性方法的正确模式 "class"

java - Sedgewick Quicksort 没有完全意义

java - 如何用 Java 生成报告?

python - 如何从父类(super class)中捕获的异常创建子类实例?

html - 在 TextMate 中标记时添加常用代码块的最佳方法是什么?

swift - 我应该在类内部实现函数来适应 MVC 吗?

java - 如何在 100 多个现有类中创建新的类变量?