2016-04-14 13 views
1

Yanıt here, Java'da özel bir olay oluşturmanın yolunu gösterir. Cevabı anladım, ama neden HelloListener arayüzünü kullandığını merak ediyorum? Bunun gerekli olduğunu düşünmüyorum.Java'da özel bir etkinlik oluştururken neden bir arabirim kullanıyoruz?

Kodum:

import java.util.ArrayList; 
import java.util.List; 

class Initiater { 
    private List<Responder> listeners = new ArrayList<Responder>(); 

    public void addListener(Responder toAdd) { 
     listeners.add(toAdd); 
    } 

    public void sayHello() { 
     System.out.println("Hello!!"); 

     for (Responder hl : listeners) 
      hl.someoneSaidHello(); 
    } 
} 

class Responder { 
    public void someoneSaidHello() { 
     System.out.println("Hello there..."); 
    } 
} 

public class Test { 
    public static void main(String[] args) { 
     Initiater initiater = new Initiater(); 
     Responder responder = new Responder(); 
     initiater.addListener(responder); 
     initiater.sayHello(); 
    } 
} 

ben yazdım kod aynı şeyi yapar düşünüyorum. Bunu böyle yapabilir miyim?

cevap

3

yapabilir, ancak bu iyi bir tasarım değildir. Arayüzlerin kullanılmasının nedeni, davranışın ayrıştırılmasıdır. Tek bir uygulamanız varsa ve bu uygulama doğrudan "başlatıcı" dan başvuruyorsa dinleyicileri kullanmaya gerek yoktur. Dinleyicinin amacı onu parçalara ayırmaktır: “başlatıcı” dinleyicinin neler yapabileceğini veya dinleyicinin ne olabileceğini (yani sınıfını) bilmez. Java statik olarak yazıldığından, bir arayüz tanımlanmalıdır. Daha sonra dinleyicinin uygulanması ayrı olabilir. Ayrı bir projede bile olabilir ve ayrı olarak derlenebilir (ör. Kütüphane oluştururken).

0

Arabirim, Dinleyicilerden çok sayıda lezzete sahip olmanızı sağlayacaktır. Arayan

interface HelloListener { 
    void someoneSaidHello(); 
} 

class Responder implements HelloListener { 
    @Override 
    public void someoneSaidHello() { 
     System.out.println("Hello there..."); 
    } 
} 

class AnotherResponder implements HelloListener { 
    @Override 
    public void someoneSaidHello() { 
     System.out.println("Hello from Responder 2"); 
    } 
} 

initiater.add(new Responder()); 
initiater.add(new AnotherResponder()); 

initiater.sayHello(); 

olacak şimdi çıktı

Hello there... 
Hello from Responder 2 
İlgili konular