专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Java教程 » 观察者模式:设计模式-快餐简解-【观察者模式】 »正文

观察者模式:设计模式-快餐简解-【观察者模式】

来源: 发布时间:星期四, 2008年12月18日 浏览:2次 评论:0
观察者模式应用场景举例】     比如在玩“极品飞车”这款游戏个车手到达终点时候都会在其它车手屏幕上显示:某某人以多少时间到达终点提示其实这就是个典型观察者模式应用观察者模式即是典型双向对多应用场景下用端来通知多

    【观察者模式解释

    类型:行为模式

    定义了对多依赖关系让多个观察者对象同时监听某个主题对象这个主题对象状态发生改变时会通知所有观察者对象使它们能够自己更新自己

    【观察者模式UML图



    【观察者模式-JAVA代码实现

    新建抽象发布通知父类:

package carer_subject;

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

import carer_observer.carer_observer;

public erface carer_subject_parent {

    
public void _state(String state_);

    
public String get_state;

    
public void add_observer(carer_observer carer_observer_ref);

    
public void sub_observer(carer_observer carer_observer_ref);

    
public void notityAllCarer;

}




    新建发布通知实现类:

package carer_subject;

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

import carer_observer.carer_observer;

public  carer_subject_sub implements carer_subject_parent {

    List
<carer_observer> list_observer =  ArrayList<carer_observer>;

    
private String state;

    
public void _state(String state_) {
        
this.state = state_;
    }

    
public String get_state {
        
 state;
    }

    
public void add_observer(carer_observer carer_observer_ref) {
        list_observer.add(carer_observer_ref);
    }

    
public void sub_observer(carer_observer carer_observer_ref) {
        list_observer.remove(carer_observer_ref);

    }

    
public void notityAllCarer {
        state 
= "到达终点";
        
for ( i = 0; i < list_observer.size; i) {
            list_observer.get(i).show_info;
        }

    }

}




    新建观察者接口:

package carer_observer;

import carer_subject.carer_subject_parent;

public erface carer_observer {

    
public void show_info;

}




    新建观察者实现类: package carer_observer;

import carer_subject.carer_subject_parent;

public  carer_observer_imple implements carer_observer {

    
private carer_subject_parent carer_subject_parent_ref;

    
public carer_subject_parent getCarer_subject_parent_ref {
        
 carer_subject_parent_ref;
    }

    
public void Carer_subject_parent_ref(
            carer_subject_parent carer_subject_parent_ref) {
        
this.carer_subject_parent_ref = carer_subject_parent_ref;
    }

    
public carer_observer_imple(carer_subject_parent carer_subject_parent_ref) {
        
super;
        
this.carer_subject_parent_ref = carer_subject_parent_ref;
    }

    
public void show_info {
        .out.prln(carer_subject_parent_ref.get_state);

    }

}




    新建客户端运行类:

package run_;

import carer_observer.carer_observer_imple;
import carer_subject.carer_subject_parent;
import carer_subject.carer_subject_sub;

public  run_ {

    
public  void (String args) {

        carer_subject_parent carer_subject_parent_ref 
=  carer_subject_sub;

        carer_observer_imple carer_observer_imple_ref1 
=  carer_observer_imple(
                carer_subject_parent_ref);
        carer_observer_imple carer_observer_imple_ref2 
=  carer_observer_imple(
                carer_subject_parent_ref);
        carer_observer_imple carer_observer_imple_ref3 
=  carer_observer_imple(
                carer_subject_parent_ref);
        carer_observer_imple carer_observer_imple_ref4 
=  carer_observer_imple(
                carer_subject_parent_ref);

        carer_subject_parent_ref.add_observer(carer_observer_imple_ref1);
        carer_subject_parent_ref.add_observer(carer_observer_imple_ref2);
        carer_subject_parent_ref.add_observer(carer_observer_imple_ref3);
        carer_subject_parent_ref.add_observer(carer_observer_imple_ref4);

        carer_subject_parent_ref.sub_observer(carer_observer_imple_ref3);

        carer_subject_parent_ref._state(
"到达终点");

        carer_subject_parent_ref.notityAllCarer;

    }

}




    运行结果如下:

到达终点
到达终点
到达终点




    以对多方式进行对方状态改变而去通知多方观察者模式也叫发布/订阅模式方进行发布而多方进行订阅和生活中看报纸你喜欢订城市晚报就会发给你

    【观察者模式-MyEclipse6项目JAVA代码实现

    观察者模式observer举例代码:点击

相关文章

读者评论

  • 共0条 分0页

发表评论

  • 昵称:
  • 内容: