Java設計模式

來源:互聯網
上載者:User

觀察者模式定義了一個一對多的對象關係:一個主體對象對應多個觀察者對象。當主體對象發生改變時,所有它對應的觀察者對象都會自動得到通知並更新。

本文將給出一個相應的案例具體說明觀察者模式是如果工作的。這個案例示範了一個當一個任務的資訊改變時通知這個任務所涉及所有人員的案例。任務資訊包括任務狀態,任務所採用的處理流程和任務完成後的checklist[用來確保任務完成所有預定需要完成的功能列表和避免一些常見的錯誤]。

先定義兩個介面:主體對象介面和觀察者對象介面。

/** *//**
  * 主體對象介面定義了註冊觀察者,取消觀察者和通知觀察者方法。
  *
  */
public interface ISubject {

    /** *//**
     * 為該主體對象註冊一個觀察者。
     */
    public void registerObserver(IObserver observer);

    /** *//**
     * 從該主體對象中取消一個觀察者的註冊。
     */
    public void removeObserver(IObserver observer);

    /** *//**
     * 通知所有觀察者。
     */
    public void notifyObserver();
}

/** *//**
  * 觀察者介面簡單定義了一個用來更新觀察者資訊的介面。
  * 當主體對象被更新時,這個介面方法會被自動調用並更新資訊。
  */
public interface IObserver {

    /** *//**
     * 介面方法用來更新觀察者的資訊。
     */
    public void remind(ITask taskSubject);
}

這兩個介面只定義了主題對象和觀察者對象所需要的介面,但是沒有實現任何任務相關的具體的方法和介面。下面會再定義一個任務介面來規定任務應該具備的功能。這樣分開定義的好處在於,如果我們將不同的模組分解開來,如果一方需要更新,另一方不會受到影響。

/** *//**
  * 這裡定義了一個任務應該具有的功能。
  */
public interface ITask {

    public void setStatus(String status);
    public String getStatus();

    public void setProcess(String process);
    public String getProcess();

    public void setCheckList(String checkList);
    public String getCheckList();
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.