2016-03-23 16 views
0

Merhaba, bazı benzer konularda burada okumaya devam ettim ama hiçbiri sorumu cevaplamadı. Bazıları bunu yapamayacağımı söyler, bu iyi bir şey değildir çünkü bu durumda kursumu bitiremem.Bir arayüz kullanarak Java'da iki sınıf arasında nasıl iletişim kurulabilir?

Heres som basit bir kod. Her bloğu ayrı bir sınıf olarak düşünün.


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) { 

    } 

} 

Peki, nasıl biri hakkında bilmeden sınıflar olmadan modeli sınıfından bu dizeyi yazdırmak için görünüm tel artık mümkündür diğer? Model-objekt referans nesnesine bir referans göndermesine izin verilmez. ; (

+0

bunun için geri aramaları kullanın –

+1

Eğer * sadece * bir modelin '' Denetçi'' olduğunu bilen '' '' '' '' '' '' '' '' 'ile ilgili iki etki arasında * etkileşimlerini * koordine etmek için' 'Görünüm' 'hakkında bilgi sahibi olsaydı ... –

+0

Tam bir çözüm, ancak değişkenlerin somut sınıf yerine Arabirim olarak bildirilmesini isteyeceğinizden şüpheliyim. – BPS

cevap

0

Ben tavsiyem örneğin, bağımlılık enjeksiyon kullanımı:

public interface MyInterface { 

    void printMessage(String str); 

} 

bir sınıf tanımlayın bildirimi tetikleyebilecek:

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 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); 
    } 
} 

+0

'this.printer = printer;' yazmasını öneririm. – Manu

+0

Sanırım başka bir yol yok. Bu şekilde modelin görünümü biliyor ... Görünümün arayüzü uygulamaması gerekiyor ... –

+0

Ayrıca, bakış açısının, model hakkında bilmesi gerektiğini, ancak başka bir şekilde bilmemesi gerektiğini düşünüyorum! Etrafında doğru şekilde çalışmak için nasıl alabilirim? –

0

bir arabirimi tanımla Bilgilendirilecek bir sınıf tanımlayın:

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); 
    } 
} 

çalışır nasıldır ?:

bu bir geri arama parttern adlı

, sınıf ClassNotifier impl olan arayüz MyInterface, bir referansı vardır. Informed sınıfına göre, ClassNotifier yöntemi printMessage yöntemini her çağırdığında, Informed sınıfındaki printMessage yöntemi de tetiklenir.

+0

Neye ihtiyacım var gibi görünüyor. Örneğinizde, Informedclass, bir şeyler basan ve classNotifier'ın tüm verilere sahip model olacağı görünüm olurdu. –

+0

Ancak bu, görünümü modele gönderiyor olacağım anlamına mı geliyor? Düşünmediğim doğru. Modeli görüşe yollamalı mıyım? –

+0

kodu, sizin için gereken her şeye uyarlayabilirsiniz: arabirimi kullanan 1 sınıf ve bildirimi alabilen bir sınıf –

İlgili konular