国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java設(shè)計模式之觀察者模式

haitiancoder / 559人閱讀

摘要:觀察者模式的使用場景比如你微博關(guān)注了一個人,那么這個人發(fā)布的微博就會推送到你這。

Java設(shè)計模式之觀察者模式

一直想寫一篇學(xué)習觀察者模式的總結(jié)沒有契機,今天學(xué)習阻塞隊列的原理時候看到在實現(xiàn)生產(chǎn)者消費者的時候用到了通知模式,就是所謂的觀察者模式,正好順便整理一下。

1. 簡介

觀察者模式定義對象間的一種一對多的依賴關(guān)系,當一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都得到通知并被自動更新。也就是 發(fā)布-訂閱 的模式。

觀察者模式涉及到的參與者有:

Subject(目標):被觀察者的接口,提供注冊/刪除觀察者和發(fā)通知的方法;

Observer(觀察者):觀察目標的對象接口,提供目標發(fā)生改變時需要處理更新的方法;

ConcreteSubject(具體目標):實現(xiàn)被觀察者接口的具體被觀察者類,維護一個觀察者的引用,在發(fā)通知的時候調(diào)用觀察者的更新方法;

ConcreteObserver(具體觀察者):實現(xiàn)觀察者接口的具體觀察者類。

觀察者模式的使用場景

比如你微博關(guān)注了一個人,那么這個人發(fā)布的微博就會推送到你這。

還比如你關(guān)注了一個微信公眾號,這個公眾號發(fā)布的文章也會推送到你這。

2. 實例代碼

就拿微博關(guān)注來舉個例子,一些人關(guān)注了一個大V,那么大V每次發(fā)微博,這些人就會收到推送,哪天大V發(fā)的微博讓某些人不爽了,果斷取關(guān),那么以后就不會收到大V的推送消息了。

新建Subject接口
package con.wangjun.designPattern.observer;

public interface Subject {
    public void addFans(Observer o);  // 添加粉絲
    public void removeFans(Observer o);  // 移除粉絲
    public void notifyFans(String str);  // 通知粉絲
}
新建Observer接口
package con.wangjun.designPattern.observer;

public interface Observer {
    // 當被觀察者調(diào)用notifyFans發(fā)通知,update方法會被回調(diào)
    public void update(String str);
}
新建Subject實現(xiàn)類
package con.wangjun.designPattern.observer;

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

public class VSubject implements Subject {
    
    List list = new ArrayList<>();
    
    // 發(fā)布微博
    public void publish(String str) {
        System.out.println("大V發(fā)布微博:" + str);
        // 通知所有粉絲
        notifyFans(str);
    }

    @Override
    public void addFans(Observer o) {
        list.add(o);
    }

    @Override
    public void removeFans(Observer o) {
        list.remove(o);
    }

    @Override
    public void notifyFans(String str) {
        for(int i = 0; i < list.size(); i++) {
            list.get(i).update(str);
        }
    }

}
新建Observer實現(xiàn)類
package con.wangjun.designPattern.observer;

public class FansObserver implements Observer {
    
    private String name;
    
    public FansObserver(String name) {
        this.name = name;
    }

    @Override
    public void update(String str) {
        System.out.println(name + " 收到大V的微博發(fā)文:" + str);
    }

}
新建測試類
package con.wangjun.designPattern.observer;

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

public class Main {

    public static void main(String[] args) {
        VSubject vs = new VSubject();  // 大V的實例  
        List fans = new ArrayList<>();  //存儲所有粉絲
        
        for(int i = 0; i < 5; i++) {
            FansObserver f = new FansObserver("name" + (i + 1));
            fans.add(f);
            vs.addFans(f);
        }
        // 本次發(fā)微博,5個粉絲都收到推送
        vs.publish("我的女朋友真好看!");
        // 居然秀恩愛,前2個粉絲,看不下去了,取關(guān)!
        for(int i = 0; i < 2; i++) {
            vs.removeFans(fans.get(i));
        }
        
        //這次發(fā)微博,那兩個取關(guān)的人就看不到了
        vs.publish("我要送所有粉絲一部iPhone X");
    }
}
運行結(jié)果
大V發(fā)布微博:我的女朋友真好看!
name1 收到大V的微博發(fā)文:我的女朋友真好看!
name2 收到大V的微博發(fā)文:我的女朋友真好看!
name3 收到大V的微博發(fā)文:我的女朋友真好看!
name4 收到大V的微博發(fā)文:我的女朋友真好看!
name5 收到大V的微博發(fā)文:我的女朋友真好看!
大V發(fā)布微博:我要送所有粉絲一部iPhone X
name3 收到大V的微博發(fā)文:我要送所有粉絲一部iPhone X
name4 收到大V的微博發(fā)文:我要送所有粉絲一部iPhone X
name5 收到大V的微博發(fā)文:我要送所有粉絲一部iPhone X
參考:

《面向?qū)ο蟮脑O(shè)計模式》

JAVA設(shè)計模式之觀察者模式https://www.cnblogs.com/luoha...

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/69623.html

相關(guān)文章

  • Java 設(shè)計模式察者模式

    摘要:三內(nèi)置觀察者模式了解內(nèi)置觀察者模式包內(nèi)包含最基本的類與接口,這和上面的接口與接口很類似。根據(jù)具體的需求,如果內(nèi)置的觀察者模式不能滿設(shè)計,那么我們可以像剛開始那樣自己實現(xiàn)一套觀察者模式。參考資料設(shè)計模式 一、了解觀察者模式 1.1 什么是觀察者模式 觀察者模式定義了對象之間的一對多依賴,這樣一來,當一個對象狀態(tài)改變時,它的所有依賴者都會收到通知并自動更新。 典型的問題比如報社,只要你是他...

    jsummer 評論0 收藏0
  • 前端學(xué)習筆記察者模式

    摘要:觀察者模式也稱發(fā)布訂閱模式它的作用就是當一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都將得到通知,自動刷新對象狀態(tài)舉個生活比較常見常見的例子比如你去面試之后,面試官看你表現(xiàn)不錯,最后會跟你要聯(lián)系方式,以便之后可以聯(lián)系你。 觀察者模式也稱發(fā)布-訂閱模式,它的作用就是當一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都將得到通知,自動刷新對象狀態(tài) 舉個生活比較常見常見的例子,比如你去面試之后,...

    tommego 評論0 收藏0
  • 設(shè)計模式察者設(shè)計模式

    摘要:關(guān)鍵概念理解觀察者設(shè)計模式中主要區(qū)分兩個概念觀察者指觀察者對象,也就是消息的訂閱者被觀察者指要觀察的目標對象,也就是消息的發(fā)布者。 原文首發(fā)于微信公眾號:jzman-blog,歡迎關(guān)注交流! 最近補一下設(shè)計模式相關(guān)的知識,關(guān)于觀察者設(shè)計模式主要從以下幾個方面來學(xué)習,具體如下: 什么是觀察者設(shè)計模式 關(guān)鍵概念理解 通知觀察者的方式 觀察者模式的實現(xiàn) 觀察者模式的優(yōu)缺點 使用場景 下面...

    NotFound 評論0 收藏0
  • 設(shè)計模式系列察者模式

    本文從jdk內(nèi)置的觀察者模式來介紹觀察者模式。業(yè)務(wù)場景:當老師進門的時候,班長帶頭叫老師好,然后全班同學(xué)一起交老師好因為太簡單,直接上代碼 班長繼承自O(shè)bservable package Observer; import java.util.Observable; import java.util.Observer; public class Monitor extends Observabl...

    Edison 評論0 收藏0
  • Java設(shè)計模式察者模式詳解

    摘要:觀察者模式,是一對多的關(guān)系,一個主題對應(yīng)多個觀察者,當這個主題發(fā)生變化的時候,所有觀察著這個主題的觀察者都會接收到通知來獲悉主題的變化。這就是使用的觀察者模式,下面就讓我們用代碼實現(xiàn)觀察者模式。 觀察者模式,是一對多的關(guān)系,一個主題對應(yīng)多個觀察者,當這個主題發(fā)生變化的時候,所有觀察著這個主題的觀察者都會接收到通知來獲悉主題的變化。 在現(xiàn)實中我們也會遇到許許多多應(yīng)用觀察者模式的行為,比如...

    dayday_up 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<