2012-04-09 136 views
1

觀察員?設計模式

public class mammal implements Imammle 
{ 

    public String getName() { 
     return "Mammal"; 
    } 

    public String speak() { 
     return getName() + "Maaaauuu"; 
    } 

} 

我需要知道什麼時候我的動物發出聲音,這樣我可以像吃飼料實時採取相應的行動。
我應該使用什麼樣的設計模式? 謝謝。

+0

請更改您的問題,因爲它不清楚。 – Phani 2012-04-09 05:37:43

+0

我看到標題中的問題的答案 – mishadoff 2012-04-09 10:56:32

回答

3

Observer設計模式可能可以用來解決您的問題。 Observer模式中,有兩種不同類型的對象:

  1. 觀察對象是希望每當觀察對象更改通知對象。
  2. 可觀察對象是可以通過觀察

觀察員與他們希望觀看可觀察對象註冊觀看的對象。每當對象發生更改時,它都會通知所有已註冊的觀察者

根據您的代碼示例,我將假設您正在使用Java。在這種情況下,您可以使用ObserverObservable來減少必須對現有代碼進行的更改次數。

public class mammal extends java.util.Observable implements Imammle 
{ 

    public String getName() { 
     return "Mammal"; 
    } 

    public String speak() { 
     setChanged(); // We have been changed 
     notifyObservers(); // Notify everyone that we have changed 
     return getName() + "Maaaauuu"; 
    } 

} 

現在我們創建一個類,希望觀看的時候有新的變化:

public class Watcher implements java.util.Observer 
{ 
    public void update(Observable o, Object arg) { 
     System.out.println("Something has changed"); 
    } 
} 

最後,我們註冊了一個mammal觀察者(S),使他們能夠每當它改變的通知。

public class Main 
{ 
    public static void main(String args[]) { 
     mammal cow = new mammal(); 
     Watcher farmer = new Watcher(); 
     cow.addObserver(farmer); 
     cow.speak(); 
    } 
} 

有一些抽獎中後衛這種方法:

  1. 觀察員可以與任何可觀察對象進行登記。您可能希望您的觀察員只能觀察到mammal。另一方面,你可能希望只有某些觀察者能夠觀察到mammal
  2. 真的是沒有任何辦法爲你的觀察員知道究竟與mammal改變,而不

設置如果這些平局中後衛是你的問題,那麼你可能想避免觀察和可觀察和考慮修改(mammal以及任何您的觀察者)來實現他們自己的,特定於應用程序的方法。