2015-01-15 2 views
0

저는 관찰자 패턴 디자인을 읽었으며 한 클래스가 다른 클래스의 메소드를 부모/자식이 아닌 다른 메소드의 메소드라고 부르는 논리를 이해할 수 없었습니다.어떻게 한 클래스가 다른 클래스의 메서드를 호출하여 하나가 다른 클래스의 부모 클래스 또는 자식 클래스가 아닌 경우?

예를 들어 회사 및 직원 클래스는 다음과 같습니다.

public class Company { 
    String name; 

    public void hire() { 
     System.out.println("company hires employees"); 
    } 
} 

class Employee { 
    int age; 
    String name; 

    public void gotHired() { 
     System.out.println("employee got hired by a company"); 
    } 
} 

이러한 클래스가 서로 통신하여 통신 할 수있는 방법이 있습니다. 설명에 도움이되는 방법을 추가 할 수 있습니다. 그렇게 할 수 있도록 당신이

+0

클래스 수행 "의사 소통"하지 마라. _Instances_ 할 수 있습니다. – moonwave99

답변

2

하나 개의 클래스 다른 클래스 개체의 참조를 포함해야합니다 감사

직원 클래스 메서드

행운을 사용할 수있는이 방법으로 회사의 클래스 객체에서

public class Company { 
    String name; 
    Employee employee=new Employee(); 

    public void hire() { 
     System.out.println("company hires employees"); 
    } 
} 

!

+0

이것은 사실이지만 * Observer 패턴 *과는 아무런 관련이 없습니다. –

+0

예, 저는 하위 클래스 객체에 수퍼 클래스/인터페이스의 메소드를 사용하는 것을 포함하는 관찰자 패턴을 꽤 많이 알고 있습니다. 그러나 숟가락 먹이는 질문자가 어디에 있는지, 우리가 그들을 안내하기 위해 여기에 있는지, 자신의 문제로 다이빙하면 배우고 진행하고, 이해가 되길 바란다. 그래서 나는 구두꾼이 앞으로 나아갈 수있는 포인터를 붙여 넣었다. – Vihar

1

예. 그들은 의사 소통을 할 수 있습니다. 회사는

public class Company { 
    String name; 
    List<Employee> empList = new ArrayList<Employee>(); // list of employees belonging to the company. "Composition" 

    public void hire() { 
     System.out.println("company hires employees"); 
    } 
    public void addEmployee(Employee e){ // add employee to company. I just got Hired!!! 
    empList.add(e); 
    } 

    String getFirstEmployee(){ // get first employee 
    if(!empList.isEmpty){ 
    Employee e = empList.get(0); 
     return e 
    } 
    } 




} 

class Employee { 
    int age; 
    String name; 

    public void gotHired() { 
     System.out.println("employee got hired by a company"); 
    } 
} 
0

이 제품은 관찰자 구현, 여러 employees.So 할 수 있습니다.

public interface Observer 
{ 
    public void notifyMe(); 
} 

그런 다음 알림을 받을지 : 모든 인터페이스의 첫 번째

public class Player implements Observer 
{ 
    @Override public void notifyMe() { 
     /* do something */ 
    } 
} 

public class Judge implements Observer 
{ 
    @Override public void notifyMe() { 
     /* do something */ 
    } 
} 

그런 통지의 책임자 :

public class Game 
{ 
    private ArrayList<Observer> listOfObserver; 


    public Game() { 
     listOfObserver = new ArrayList<>(); 
    } 


    public void registerObserver(Observer observer) { 
     listOfObserver.add(observer); 
    } 

    public void startGame() { 
     ... 
     ... 
     ... 

     /* when something important happens */ 
     for (int i = 0; i < listOfObserver.size(); i++) 
      listOfObserver.notify(); 

     ... 
     ... 
     ... 
    } 
} 

을 그리고는 main() 기능 :

public class Main 
{ 
    public static void main(String args[]) { 
     Player player1 = new Player(); 
     Player player2 = new Player(); 
     Player player3 = new Player(); 
     Player player4 = new Player(); 

     Judge judge = new Judge(); 

     Game game = new Game(); 
     game.registerObserver(player1); 
     game.registerObserver(player2); 
     game.registerObserver(player3); 
     game.registerObserver(player4); 
     game.registerObserver(judge); 

     game.startGame(); 
    } 
} 
관련 문제