什麼時候需要觀察者
觀察者模式
- //觀察者
- public class ChinaParent {
- //孩子生病了他們會給孩子電話慰問
- public void callChildren(){
- System.out.println("回來吧,帶你去看醫生");
- }
- }
然後給出Children類的實現
- //被觀察者
- public class ChinaChildren {
- private ChinaParent p;
- public void gotSick(){
- p.callChildren();
- }
- }
- public interface Parent {
- public void callChildren();
- }
- public interface Children {
- public void notifyParent();
- }
- //觀察者
- public class ChinaParent implements Parent{
- //孩子生病了他們會給孩子電話慰問
- public void callChildren(){
- System.out.println("回來吧,帶你去看醫生");
- }
- }
- <pre code_snippet_id="267314" snippet_file_name="blog_20140331_6_1751525" name="code" class="java">//被觀察者
- public class ChinaChildren implements Children{
- private Parent p;
- public void notifyParent() {
- p.callChildren();
- }
- public void setObserver(Parent p){
- this.p = p;
- }
- }</pre><br>
- <br>
- <pre></pre>
- 這樣就把孩子和具體的Parent解耦了,現在當有新類型的Parent時,我們也不用擔心爲了將新的觀察者加入到我們的系統中而修改源碼了。如:
- //觀察者
- public class AmericaParent implements Parent{
- //孩子生病了他們會給孩子電話慰問
- public void callChildren(){
- System.out.println("自己去看醫生");
- }
- }
- public interface Children {
- public void notifyAllParents();
- }
- import java.util.ArrayList;
- //被觀察者
- public class ChinaChildren implements Children{
- private ArrayList<Parent> ps;
- public void notifyAllParents() {
- for(int i=0;i<ps.size();i++){
- ps.get(i).callChildren();
- }
- }
- public void addObserver(Parent p){
- ps.add(p);
- }
- public void delObserver(Parent p){
- ps.remove(p);
- }
- }