java使用哪种设计模式(主动和被动方法)?
我有一个播放器,它可以喂狗或砍树
以下是我写的课程:
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);
}
玩家和狗都有主动的方法
玩家喂狗,狗开始吃食物(我真的不确定以这种方式结合方法是否好)
另一方面,我有树。玩家可以砍树
公开课选手{
public void chop(Tree tree) {
//At this point I am not sure
}
我不确定是否会使用Tree类的getter和setter与树交互
或者,如果我应该为此编写一个自己的方法,因为树被砍掉了,所以它没有任何活动,我会调用它
因此,最终会有两种或两种以上的实现,但我想到的两种是:
tree.setAmountofWood = x
或
tree.gettingChopped(Damage int)
我想我应该为这个切碎过程制定一个自己的方法
或者我应该遵循什么设计原则
# 1 楼答案
我会从这样的事情开始
树可以生长并受到伤害
食物只储存营养价值
我不确定是否所有类型的玩家都能砍树,所以我创建了一个类来区分责任。如果愿意,可以将方法移动到Player类
在你代码的某个地方
# 2 楼答案
我不会在这里深入探讨被动/主动方法。“活动树”可能确实是一个用词不当的词
,这反过来会恶化树的状态。在树的状态达到某个限制后,树可能会启动其他操作(=树的坏状态的后果)
,因此它的状态每次都可能会有所改善,因此最终甚至可能会从仅被部分切割恢复到最初的完美状态
我宁愿调用一个对象的方法来传递一个<强>消息<强>对象。显然,您需要将消息发送到树,告诉它当前正在被某人切割,并让树决定何时进行切割,例如
fall()
或bend()
,或shake()
树有一些内部状态(
strength
?thickness
其主干?health
?)向树发送消息”意味着调用其方法,例如^{当然,在主循环的每一次迭代中,树也有机会将消息发送到^{
所以,是的,虽然树木看起来相当被动,但它们仍然对信息/刺激做出反应。:-)
# 3 楼答案
我在这里看到三条原则
所以你必须使用
您的代码:
Dog.feed
是错误的,请将其重命名为Dog.eat
,因为狗没有进食,狗正在进食。顺便说一句,食物必须降低其营养价值李>