java-設計模式(行為型)-【觀察者模式】

來源:互聯網
上載者:User

標籤:

1.觀察者模式(Observer Mode)

  定義:一種一對多的關係,屬於類與類之間的關係,不涉及繼承。

         當一個對象變化時,其它依賴該對象的對象都會收到通知,並且隨著變化!

  關係圖:

          

2.領導通知學生和老師的例子

   2.1 觀察者

//觀察者介面:更新方法(更新所有的子類)public interface Observer {     //更新所有的Observervoid update();}//學生類class Student implements Observer{   String name;   public Student(String name)   {   this.name=name;   }@Overridepublic void update() {// TODO Auto-generated method stubSystem.out.println(name+"收到通知。。。");}}//老師類class Teacher implements Observer{String name;    public Teacher (String name)    {    this.name=name;    }@Overridepublic void update() {// TODO Auto-generated method stubSystem.out.println(name+"收到通知。。。");}

  2.2  主體:領導類

//主體:管理所有的觀察者和通知觀察者public abstract  interface Subject {//添加觀察者方法void addObserver(Observer ob);//刪除觀察者方法void removeObserver(Observer ob);//通知所有的觀察者void notifyObservers();}//領導類class Leader implements Subject{    //儲存所有觀察者的池:線程同步類vectorprivate Vector<Observer> vt=new Vector<Observer>();//添加觀察者@Overridepublic void addObserver(Observer ob) {// TODO Auto-generated method stubvt.add(ob);}    //刪除觀察者@Overridepublic void removeObserver(Observer ob) {// TODO Auto-generated method stubvt.remove(ob);}    //通知觀察者@Overridepublic void notifyObservers() {//調用每個觀察者的更新方法Enumeration<Observer> e=vt.elements();System.out.print("領導通知所有下屬:");getCurrentDate();while(e.hasMoreElements()){Observer ob=e.nextElement();ob.update();}}//擷取當前系統時間public void getCurrentDate(){Calendar cal=Calendar.getInstance();SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");    String date=sdf.format(cal.getTime());    System.out.println(date);}}

  2.3 測試

public class Test {public static void main(String[] args) {// TODO Auto-generated method stub       Subject  leader=new Leader();       Student stu1=new Student("張學生");       Teacher t1=new Teacher("李老師");       //添加入觀察者池       leader.addObserver(stu1);       leader.addObserver(t1);       //通知所有觀察者       leader.notifyObservers();}}

  2.4 運行結果

領導通知所有下屬:2015-04-20 11:22:06張學生收到通知。。。李老師收到通知。。。

  

 

java-設計模式(行為型)-【觀察者模式】

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.