0

我有一个Quad类(用于我的精灵),并且在这个类中有用于改变所述 Quad 状态的各种变量。所以我可以简单地制作一个像这样的精灵:

Quad hero = new Quad();

我有一个资源类,我的所有精灵都被保存/创建。

我有一个Main类,它不是Resource 的相邻类,因此为了避免违反 Demeter 的规则,我在Resource类(它是Main的邻居)中创建了各种 getter/setter。

但是,由于我有很多变量需要访问,是否有更好的方法为每个变量创建 getter/setter?

我想做一些事情,比如能够编写一个简单地返回 Quad 的 getter,这样我就可以在Main类中访问它的变量。所以在Resource,我会有这样的东西:

public Quad getQuad(Quad quad){

    return quad;

}

然后在我的Main类中,我想要这样的东西:('res' 是我的 Resouce 类的对象)

res.getQuad(hero).variable;

我意识到上述方法行不通——这只是我想要实现的目标的一个例子。

或者也许我可以在 getter 本身中放入一些代码,让我可以访问它的任何变量而不是特定的变量。

这只是为了让我不必通过这样做来破坏 Demeter,我在很多情况下都确信这不是好的做法:

res.hero.variable;

将不胜感激任何帮助。

4

2 回答 2

1

如果“变量”是 Quad 的可访问字段,您的示例是正确的。

res.getQuad(hero).variable;

或者您可以将 Quad 分配给局部变量并稍后访问变量

Quad q = res.getQuad(hero);

/* do something with */ q.variable1;

您可以HashMap<String, Quad>在资源中有一个,因此您可以使用创建它时使用的一些键来获得一个四边形。如果你有很多的话,这比为所有的四边形编写 getter 更容易。

于 2013-08-02T18:14:27.360 回答
1

如果事情不是静态的,您可能有兴趣在此处遵循单例设计模式。

但是,如果资源在您的项目中经常使用 - 但包含静态成员(或您应该返回并使其成为静态的成员) - 那么为所有内容创建 getter 和 setter 是相当愚蠢的。只需将它们设为公共对象并像常量一样访问它们。

现在,如果您想做上面描述的事情(这是一种非常好的方法) - 这当然是可能的。您需要在资源类中保留一个字典,该字典使用某种键来访问成员。您可能希望设置一个 Enum,并将每个成员的名称分配给索引。并使用枚举作为字典的键。这样你就可以像这样访问它:

res.getQuad(Resource.MyEnum.Resource1).variable;

资源然后需要类似的东西:

public Dictionary<MyEnum, Quad> my_quads = new Dictionary<MyEnum, Quad>();

public static enum MyEnum
{
    Resource1 = 0
    Resource2 = 1
    Resource3 = 2
}

public Quad getQuad(MyEnum resource_index)
{
    return my_quads[resource_index];
}
于 2013-08-02T18:16:17.247 回答