考虑这种情况:我有一个水族馆模拟器,我有5种不同类型的鱼。不同的类型意味着不同的属性(速度,颜色,饥饿等)。如果我希望模拟器的用户能够创建一种新类型的鱼并为其属性赋值,该怎么办?
程序员如何实现?我是否需要某种“事件处理”,它会在我的“Fish”类中添加一堆特定的代码行?这甚至是一个有效的想法吗?
(如果它必不可少,语言是Java。并且为了避免任何误解并防止诸如“这是单一工作吗?”之类的评论,是的。但是我不是在寻找答案,我对这个概念感到好奇。)
编辑:是的,我的错,我没有提到互动方式:GUI。
因此,想象一个名为“添加新物种”的标签,其中包含鱼类的每个属性(类型,速度,颜色等)的字段。因此,用户使用适当的值填充字段,当他点击“添加”时,将调用构造函数。至少那是我的想象。 :)
答案 0 :(得分:1)
我只想使用地图:
class Fish
{
Map<String,String> attributes = new HashMap<String,String>();
setBusterFish()
{
attributes.put("speed", "5");
attributes.put("colour", "red");
attributes.put("hunger", "10");
attributes.put("name", "buster");
}
}
答案 1 :(得分:1)
Java是一种OO语言,它处理类和对象。诱人的,天真的解决方案是让你的程序处理鱼的“类”,就像它处理任何类的类,即创建一些Java代码,让编译器和加载器将它引入运行时。
这种方法可以使用,但有些尴尬。从本质上讲,你的“动态Java类”编码可能最终会比你的实际意图更大更复杂。
如果你真的要为不同的鱼提供不同的属性(不仅仅是这些属性的不同值),你真的需要这样做;即便如此,也有更简单的解决方案。
对于被问到的问题,我认为你真的只需要一个Fish
课程。当用户定义一个新的时,他真正定义的是属性值。
如果您真的想要新的动态属性,那么您可以使用例如一个HashMap
来存储名称/值对。您可以让用户添加"legs" / "4"
,然后按原样打印出新属性;但是你不能让鱼在这些腿上行走,因为你将缺少使用新属性的编码。
答案 2 :(得分:0)
让用户定义FishSpecies类的实例的属性值,并为FishSpecies提供一个createFish方法,该方法创建该种类的鱼(即具有这些属性值)。跟踪列表中的所有FishSpecies对象,可以让您有机会管理FishSpecies对象,并创建给定物种的Fish对象。
如果我正确地理解了你的问题,那么我认为使事情变得更复杂是一个错误。
答案 3 :(得分:0)
查看type object pattern。还谷歌我刚刚给了我发现的第一个参考文献之一...
您还可以查看Reflection pattern ...