我现在应该如何“构建”事物我已经实现了多态性? (Java,SIM游戏)

时间:2009-08-02 21:45:57

标签: java switch-statement simulator

我正在开发一款小型java游戏,它是1995年游戏主题医院的一种克隆。 我最近一直在研究GUI和Level结构,现在我有路径查找和网格工作。 我目前的“构建东西”的方式包括一个房间和一个接待台,到目前为止它工作正常,但我需要实现一种方法来添加不同类型的房间和项目。 这是我按下按钮时的当前代码,用于创建对象(http://snipt.org/lUm)。

我确信必须有更好的方法来做到这一点!我知道,我的实现很差,但我最近才开始了解如何使用抽象类和接口。

实际上设置房间或项目的属性,我目前没有问题。我正在考虑未来,但我喜欢我对如何在Stack上做最好的事情有不同的看法。关于如何实现这样的事情的想法?这种事情有什么例子吗?我会搜索它,但我不确定要搜索什么,因为我不知道我正在做什么有一个确切的名字。

如果我不太清楚我在说什么,我很抱歉。我很乐意回答有关此问题的任何进一步问题,或者根据需要或要求上传更多代码段。

提前感谢您的时间和想法!

4 个答案:

答案 0 :(得分:3)

查看factory pattern。工厂是一种通过提供参数来创建对象的方法,并且可以获取符合公共接口的对象。然而,实施由工厂决定。调用代码不需要知道这一点。

通过将对象构造封装在另一个对象(工厂)中,选择要构建的特定对象的机制将从调用代码中抽象出来。通过仅修改工厂本身,您可以在以后轻松提供更多子类。

因此,在您的示例代码中,buildMe()方法是一种工厂形式。它需要一些参数来指定需要构建的内容 - RoomReceptionDesk。这两个都将实现相同的接口(HospitalComponent?),然后调用代码将该组件放在医院内。您可以将更多的HospitalComponent子类添加到工厂(OperatingTheatre?),并且调用代码不必更改。

值得调查design patterns(在此方案中,查看此creational patterns列表)以了解使用对象解决常见问题的不同方法,以及如何与其他人沟通您的解决方案。 Gang-of-Four本书是本课程的圣经。

答案 1 :(得分:1)

多态性对于你正在做的事情可能有点过分。

就个人而言,我只会有一个Room类,其中包含每个建筑物的值表(最大尺寸,每块瓷砖的成本等)。然后,当您构建一个新房间时,获取匹配的表条目,并使用表中的详细信息创建Room对象。

这可能不是最好的做法,它可能违反Java惯例(我从动态语言来到Java)但是就需要更改以创建新房间的代码行而言,它是我发现的最低值

答案 2 :(得分:0)

你现在拥有的是一个带有一堆静态函数的类。它不是非常OOP - 该类只是一种将所有函数分组到一个文件中的方法。

如果你去OOP路线,你需要一个房间基础班,然后是OperatingRoom,ReceptionistDesk,浴室,办公室(工作人员),MRIRoom,WaitingRoom,甚至可能是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.
}

答案 3 :(得分:0)

在使用多态性对此问题进行建模之前,我会仔细考虑。

问题是:每种类型的房间会有什么根本不同的行为?所有这些之间有什么共同之处?

多态性并不总是答案。组合有时可以使事情更加灵活。如前所述,数据驱动的解决方案可能是最好的。