我工作的一个小的Java游戏,这是一种在1995年游戏主题医院的克隆。 我最近一直在GUI和层次结构,现在我有寻路和网格工作。 我现在的“建设东西”的方式由一个房间和一个前台的,它工作正常,到目前为止,但我需要实现一个方法来添加不同类型的房间和物品。 这是我在按下按钮的创建对象的当前代码( http://snipt.org/lUm)。

我敢肯定,必须有一个更好的办法来做到这一点!我的实现是可怜的,我知道,但我最近才开始了解如何使用抽象类和接口。

实际设置的房间或物品的性质,我现在有没有问题。我想到的是未来,但我爱我的身体情况如何对堆栈在这里做的事情最好的办法不同的意见。在如何的想法这样的事情应该可以实现吗?这样的事情的任何例子吗?我会寻找它,但我真的不知道要寻找什么,因为我不,如果我在做什么有一个确切的名称。

我很抱歉,如果我没有太清楚到底是什么我谈论。我会很高兴回答这个任何进一步的问题,并且或者根据需要或者所请求上传的代码更多个部分。

在此先感谢您的时间和想法!

有帮助吗?

解决方案

查看工厂模式。本厂是通过提供的参数创建对象,并获取对象回到它遵循通用接口的手段。实施,然而,由厂家决定。调用代码并不需要知道这一点。

通过在另一个对象(工厂)封装所述对象的构造,在选择特定对象建立的力学被抽象从调用代码远。你可以很容易地仅通过修改工厂本身提供在稍后的日期进一步的子类。

因此,在你的示例代码,该方法buildMe()是工厂的一种形式。这需要一些参数,指定真实需要什么来构建 - 一个RoomReceptionDesk。这两个会实现相同的接口(一个HospitalComponent?),并调用代码,然后将放在医院内的组件。您可以添加HospitalComponent的进一步子类工厂(一OperatingTheatre?),并且调用代码没有改变。

这是值得研究的设计模式(在这种情况下,看看这个创建模式的)了解使用对象来解决共同问题的不同方法,以及如何与其他人沟通的解决方案。该刚对四书是这一主题的圣经。

其他提示

多态性可能是矫枉过正,你在做什么。

个人而言,我只是有一个房间类,有用于各建筑物中的值(最大尺寸,每瓦费用等)的表。然后,当你建立一个新的空间,获得匹配表条目,并从表中的详细信息来创建你的房间对象。

这可能不是最好的做法,它可能违背Java约定(我来从Java动态语言),但在需要改变,使新房间的代码行而言,这是我发现的最低

您有什么现在是一个类一堆静态函数。这不是很OOP - 类仅仅是一个方式组中的所有功能于一体的文件

如果你走的路线OOP,你会想要一个房间的基类,然后OperatingRoom,ReceptionistDesk,卫生间,办公室(对于员工),MRIRoom,候车室,甚至可能Hall。将房间的子类。

public class Room {
    protected int width, length;  //how many squares wide/long the room is

    protected int x, y;  //where it is on the gride

    protected float buildingProgress;  //how far construction has come

    protected bool isReady;  //is the building ready for use?

    protected Person occupants[];  //some list/array of people currently in the room

    protected Person resident;  //the person 'in charge' in the room--the receptionist, manager, MRI technician, etc etc.
}

我会仔细考虑与多态性建模这个问题之前。

现在的问题是:什么根本不同的行为将每种类型的房间展览?什么所有的人之间的共同点?

多态性并不总是答案。组成有时可以让事情变得更加灵活。一种数据驱动的解决方案,如先前推荐的,可能是最重要的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top