2015-01-15 15 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"); 
    } 
} 

這樣公司類對象可以使用Employee類方法

好運!

+0

這是真的,但它與*觀察者模式*無關。 –

+0

Yaa我很清楚哪些觀察者模式是包含在子類對象上使用超級類/接口的方法,但勺子餵食會把問題提交者知道在哪裏,我們在這裏引導他們,潛入他們自己的問題將使他們學習和進步,希望它有道理,所以我只是貼上了提問者可以採取的指針 – Vihar

1

是的。他們可以溝通。一個公司可以有幾個employees.So,

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

這是一個觀察實施。首先所有的接口:

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(); 
    } 
} 
相關問題