"桥接"远程班级之间的(连接)方法

时间:2016-04-18 13:35:41

标签: java ooad law-of-demeter

假设我有以下方式使用Planet和Star类以及GameLogic类

//Planet.java
package Game;

class Planet //invisible outside of package
{
   public String getType() {return "Im a Planet";}
}

//Star.java
package Game;

class Star //invisible outside of package
{
   public String getType() {return "Im a Star";}
}

//GameLogic.java
package Game;

public class GameLogic //notice the PUBLIC keyword
{
   //arrayList of stars
   //arrayList of planets

   //a ton of methods for the logic of the game itself
}

这些都属于游戏包,它只对待没有输入/输出的整个游戏逻辑。

然后,在一个名为UI的不同包中,我有Text类(UI.Text)控制用户输入,打印输出并可直接访问GameLogic,因为游戏只能通过创建GameLogic类的实例来播放

//Text.java
package UI;
import Game.*;

public class Text
{
   //some control vars

   //MAIN method
   //input and output methods
   //bla bla bla
}

所以问题是:游戏将通过创建GameLogic实例在Text.java中实例化。鉴于此,如果我想从Star和Planet输出getType()函数,我必须完成" road"以下列方式将Text与Planet / Star连接

//GameLogic.java
package Game;

public class GameLogic
{
   //same as before

   public String getPlanetType(int n) {return planetArrayList.get(n).getType();}
   public String getStarType(int n) {return starArrayList.get(n).getType();}
}

简而言之,getType()方法已经存在于“太远”的#34;因此,它迫使我创建这些简单但重复的桥梁#34;连接两端的方法。

TL-DR版本:

class A has getType()

class B has array of A

class C needs to access getType() from array of A in B 

我认为这是一种非常低效且耗时的方法,并且有更好的选择(可能涉及接口?),所以如果有人能给我一些帮助,我将非常感激。

谢谢

1 个答案:

答案 0 :(得分:1)

不要相信任何有关表现的事情。

唯一重要的是现实。

实际上,JIT通常会将您的尝试转变为微观优化颠倒。

含义:在看到真正的问题之前,不要担心性能(太多)。如果您遇到问题,请开始测量,而不是做出假设。

相反:专注于良好,干净的设计;遵循.loc原则;并编写干净,可读,可维护的代码。这比付出这种微妙之处要多一百倍。

(并且只是举个例子:一个方法getType()返回一个字符串已经看起来像一个破碎的设计。考虑使用枚举?或者甚至更奇怪:你是否意识到这一点单独使用不同的类,您的对象有不同的类型?)

如果你仍然认为你应该考虑表现,那么首先要阅读JIT,它是如何工作的,它做了什么,等等。