如何使用接口在Java中的两个类之间进行通信?

时间:2016-03-23 13:54:42

标签: java model-view-controller interface

您好我一直在阅读一些类似的主题,但没有一个回答我的问题。有人说你甚至不能这样做,这不是一件好事,因为在那种情况下我无法完成我的课程。

Heres som简单的代码。将每个块视为一个单独的类。

public interface Interface {

    void printMessage(String meddelande);

}
public class Model implements Interface {

    String message = "hej!";

    public static void main(String[] args) {

        Model model1 = new Model();

        View view1 = new View();

         model1.printMessage(model1.message); //Ska jag anropa funktionen såhär ens?

    }

    public void printMessage(String str) {

    }

}
public class View implements Interface {

    printMessage(String str) {

    }

}

那么,现在如何通过tel方式从模型类中打印这个字符串而不让类知道彼此呢?不允许将model-objekt的引用发送给view-object。 ; (

2 个答案:

答案 0 :(得分:0)

我建议您使用依赖注入,例如:

public class Model {

    String message = "hej!";
    Interface printer;

    public void Model(Interface printer) {
        printer = printer;
    }

    public static void main(String[] args) {

         Model model1 = new Model(new View());
         model1.printMessage(model1.message); 

    }

    public void printMessage(String str) {
        printer.printMessage(str);
   }
}

答案 1 :(得分:0)

定义接口:

public interface MyInterface {

    void printMessage(String str);

}

定义可以触发通知的类:

public class ClassNotifier {

    MyInterface mInterface;

    public ClassNotifier(MyInterface mInterface) {
        this.mInterface = mInterface;
    }

    public void triggerTheMsg(String msg) {
        if (mInterface != null) {
            mInterface.printMessage(msg);
        }
    }
}

定义将被通知的类:

public class InformedClass implements MyInterface {

    public static void main(String[] args) throws Exception {
         InformedClass c = new InformedClass();
         ClassNotifier cn = new ClassNotifier(c);
    }

    @Override
    public void printMessage(String newMsg) {
        System.out.println("A new msg is here: " + newMsg);
    }
}

它是如何工作的?:

这被称为回调parttern,类ClassNotifier具有对MyInterface接口的引用,这是impl。通过Informed类来,所以每次ClassNotifier调用方法printMessage时,也会触发Informed类中的方法printMessage。