国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

觀察者模式及Java實(shí)現(xiàn)例子

2019-11-06 07:30:08
字體:
供稿:網(wǎng)友

學(xué)習(xí)java的同學(xué)注意了?。?! 學(xué)習(xí)過程中遇到什么問題或者想獲取學(xué)習(xí)資源的話,歡迎加入Java學(xué)習(xí)交流群,群號碼:523047986  我們一起學(xué)Java!

觀察者模式 Observer

  觀察者模式定義了一種一對多的依賴關(guān)系,讓多個(gè)觀察者對象同時(shí)監(jiān)聽某一個(gè)主題對象。

  這個(gè)主題對象在狀態(tài)上發(fā)生變化時(shí),會通知所有觀察者對象,讓它們能夠自動更新自己。

 

觀察者模式的組成

  抽象主題角色:把所有對觀察者對象的引用保存在一個(gè)集合中,每個(gè)抽象主題角色都可以有任意數(shù)量的觀察者。抽象主題提供一個(gè)接口,可以增加和刪除觀察者角色。一般用一個(gè)抽象類和接口來實(shí)現(xiàn)。

  抽象觀察者角色:為所有具體的觀察者定義一個(gè)接口,在得到主題的通知時(shí)更新自己。

  具體主題角色:在具體主題內(nèi)部狀態(tài)改變時(shí),給所有登記過的觀察者發(fā)出通知。具體主題角色通常用一個(gè)子類實(shí)現(xiàn)。

  具體觀察者角色:該角色實(shí)現(xiàn)抽象觀察者角色所要求的更新接口,以便使本身的狀態(tài)與主題的狀態(tài)相協(xié)調(diào)。通常用一個(gè)子類實(shí)現(xiàn)。如果需要,具體觀察者角色可以保存一個(gè)指向具體主題角色的引用。

 

程序?qū)嵗?/h2>

  通過程序?qū)嵗齺碚f明觀察者模式:

  首先定義抽象的觀察者:

復(fù)制代碼
//抽象觀察者角色public interface Watcher{    public void update(String str);}復(fù)制代碼

  然后定義抽象的主題角色,即抽象的被觀察者,在其中聲明方法(添加、移除觀察者,通知觀察者):

復(fù)制代碼
//抽象主題角色,watched:被觀察public interface Watched{    public void addWatcher(Watcher watcher);    public void removeWatcher(Watcher watcher);    public void notifyWatchers(String str);}復(fù)制代碼

  然后定義具體的觀察者:

復(fù)制代碼
public class ConcreteWatcher implements Watcher{    @Override    public void update(String str)    {        System.out.PRintln(str);    }}復(fù)制代碼

  之后是具體的主題角色: 

復(fù)制代碼
import java.util.ArrayList;import java.util.List;public class ConcreteWatched implements Watched{    // 存放觀察者    private List<Watcher> list = new ArrayList<Watcher>();    @Override    public void addWatcher(Watcher watcher)    {        list.add(watcher);    }    @Override    public void removeWatcher(Watcher watcher)    {        list.remove(watcher);    }    @Override    public void notifyWatchers(String str)    {        // 自動調(diào)用實(shí)際上是主題進(jìn)行調(diào)用的        for (Watcher watcher : list)        {            watcher.update(str);        }    }}復(fù)制代碼

  編寫測試類:

復(fù)制代碼
public class Test{    public static void main(String[] args)    {        Watched girl = new ConcreteWatched();                Watcher watcher1 = new ConcreteWatcher();        Watcher watcher2 = new ConcreteWatcher();        Watcher watcher3 = new ConcreteWatcher();                girl.addWatcher(watcher1);        girl.addWatcher(watcher2);        girl.addWatcher(watcher3);                girl.notifyWatchers("開心");    }}復(fù)制代碼

學(xué)習(xí)Java的同學(xué)注意了?。?! 學(xué)習(xí)過程中遇到什么問題或者想獲取學(xué)習(xí)資源的話,歡迎加入Java學(xué)習(xí)交流群,群號碼:523047986  我們一起學(xué)Java!


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 铁力市| 七台河市| 略阳县| 中宁县| 郴州市| 南充市| 鸡西市| 鹤壁市| 台东市| 罗城| 米脂县| 兴海县| 息烽县| 鲁甸县| 玉树县| 柘城县| 青海省| 马边| 临漳县| 鄯善县| 菏泽市| 准格尔旗| 石河子市| 安陆市| 江川县| 沈阳市| 潜江市| 腾冲县| 尼木县| 石嘴山市| 万州区| 綦江县| 鄂州市| 安义县| 富阳市| 府谷县| 武威市| 沁水县| 玉林市| 陇南市| 崇信县|