从另一个类的方法访问一个类的方法的最佳实践

时间:2013-12-02 12:18:05

标签: java methods

所以我们有这个课程class Identityclass CanineCommunication

然后我们要定义一个类

class Dog {
    public Dog() {
        Identity id;
        CanineCommunication cc;
    }
    id.getParticulars(); //we can call all the public Identity methods
    cc.getMoves(); //and also the public CanineCommunication methods
}

但假设CanineCommunication类中的方法需要使用Identity方法 - 一种显而易见的方法是:

class CanineCommunication {
    getNoises(Identity id) {
        id.getParticulars();
        //~~if small be squeaky &c~~
    }

另一种方式是:

class CanineCommunication {
    Identity id;
    public canineCommunication (Identity id) {
         this.id=id;
    }
    getNoises() {
        id.getParticulars();
        //~~if small be squeaky &c~~
    }

这些方法如何比较?还有其他(更好/更差)的方法来实现这个目标吗?

4 个答案:

答案 0 :(得分:1)

这取决于您的设计: 在您将Identity对象传递给构造函数的情况下,您正在处理Identity的单个实例,您可能需要处理任何静态变量或threas不安全变量

如果你传递同一个对象但是你每次都可以灵活地传递新对象,那么每次你在类似的情况下都会传递Identity对象

或多或少取决于您的要求

答案 1 :(得分:0)

如果您的CanineCommunication实例仅适用于一个Identity,那么第二种方法会更好。因此,每个CanineCommunication都有自己的Identity,并且只使用此Identity

如果您的CanineCommunication#getNoises方法应该使用不同的身份,那么第一种方法会更好。

答案 2 :(得分:0)

问题是关系问题:noise属于哪里? bark的属性是Dog还是Dog使用来自SoundSystem的doBark

“正确”的实现总是取决于您的实际代码。例如,最好有一个SoundSystem实现,以确保实际的wave文件不会在内存中重复,并限制对声道的访问。因为在这种情况下,“声音”是(作为内存中的资源)与资源管理器相关的。

但是如果你有一些轻量级的沟通方式而且“声音”只不过是一个字符串,那么像myDog.bark()这样的东西可能会更容易。

答案 3 :(得分:0)

嗯,我会使用枚举来模拟caninccommunication。然后狗会有一个CanineCommunication类型列表。

一只小狗将成为一个扩展你的阶级狗的班级,并在他的名单中自动进行一次狡猾的犬交流。

然后你可以做这样的事情:

for(Dog myDog : myDogs)
{
   if(myDog.getCanineCommunications().contains(CanineCommunication.SQUEKY))
   {
     myDog.doSomething();
   }
}