java - 如何创建具有多个(可互换)行为的类

标签 java oop

我是 Java 的新手,现在我一直在努力解决以下问题。

我的项目中有“人类”这个类,作为我模型的一部分,我希望我的人类能够特化,从而拥有新的行为。例如,我可以让一个人开始时是“平民”,但后来可以变成“士兵”并学习新的行为。

我曾经在 Smalltalk 中通过向我的“Human”类添加一个实例变量来做到这一点,它会指向一个“Civil”的实例,这样我以后就可以将它指向一个新的“Soldier”实例在游戏中,但现在在 Java 中我仅限于类型,我不确定如何解决它(我不认为为每种可能的类型添加一个实例变量是一种可能的解决方案,但我可能是错的)。

那么,您将如何建模?任何关于我如何解决这个问题的提示都将不胜感激!

最佳答案

您可以使用组合而不是继承。因此,人类内部会有一个变量来表示其行为。你可以称之为 HumanBehaviour。扩展 HumanBehaviour 并创建 SoldierBehaviour 和 CivilBehaviour。因此,您可以随时更改您的实例行为。只需执行 myHuman.setBehaviour(new SoldierBehaviour()) 或 myHuman.setBehaviour(new CivilBehaviour());

关于java - 如何创建具有多个(可互换)行为的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20763512/

相关文章:

java - HTTPClient StringEntity PUT 问题

java - linux top 显示 java 线程?

c# - 在 C# 中构造对象的首选方法是什么?构造函数参数或属性?

c++ - 在另一个头文件 C++ 中创建一个类的实例

oop - 内聚和解耦,它们代表什么?

java - 创建 App Engine 后端时找不到 gcm.jar 错误 => 建议安装已弃用的库

java - java(swing、JFrame)中的双 if 语句不起作用

java - 模式匹配用于查询日志中的数字

java - 逻辑错误导致输出丢失/不正确,可能与 for 循环相关

oop - 什么是 "upcast"?