java - "Bridging"远程类之间的(连接)方法

标签 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
}

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

然后,在另一个名为 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() 函数,我必须按照以下方式完成连接 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() 方法已经存在于“太遥远”的类中,因此它迫使我创建这些简单但重复的“桥梁”方法来连接两端。

TL-DR 版本:

class A has getType()

class B has array of A

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

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

谢谢

最佳答案

不要相信任何关于性能的事情。

唯一重要的是现实。

在现实中,JIT 通常会颠覆您的微观优化尝试。

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

相反:专注于良好、简洁的设计;按照SOLID原则;并编写干净、可读、可维护的代码。与担心这些微妙之处相比,这样做的代价要高出一百倍。

( 举个例子:返回 String 的方法 getType() 看起来已经是一个破烂的设计了。考虑过使用枚举吗?或者更奇怪: 你是否意识到仅通过使用不同的类,你的对象就有不同的类型?)

如果您仍然认为应该研究性能,那么请先阅读有关 JIT 的内容、它的工作原理、它的作用等等。

关于java - "Bridging"远程类之间的(连接)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36695599/

相关文章:

java - 两个 ListView 不适用于 NavigationDrawer

oop - 如何将组合与继承结合使用?

ruby-on-rails - 得墨忒耳法则 : create delegates to access attributes on associated objects or not?

c++ - 得墨忒耳定律或返回整个 vector

java - java可以在对象仍在范围内时对其进行最终确定吗?

java - 通过将一些工作转移到 GPU,我的耗时 Java 应用程序是否可以从 Rootbeer 中受益?

oop - 我们为什么要使用接口(interface)?仅仅是为了标准化吗?

javascript - 在应用程序中使用 jQuery 表单绑定(bind)代码的最佳实践

java - 什么是得墨忒耳法则?

java - Java 中标点符号的模式匹配