国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

設(shè)計模式——觀察者模式(Observer Pattern)+ Spring相關(guān)源碼

這篇具有很好參考價值的文章主要介紹了設(shè)計模式——觀察者模式(Observer Pattern)+ Spring相關(guān)源碼。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


一、觀察者模式定義

類型:行為型模式
目的:當一個對象的狀態(tài)發(fā)生改變時,其所有依賴者(觀察者)都會收到通知并自動更新。


二、例子

2.1 菜鳥教程例子

2.1.1 定義觀察者

//觀察者
public abstract class Observer {
	//被觀察對象
   protected Subject subject;
   public abstract void update();
}
public class BinaryObserver extends Observer{
 
   public BinaryObserver(Subject subject){
      this.subject = subject;
      this.subject.attach(this);
   }
 
   @Override
   public void update() {
      System.out.println( "Binary String: " + Integer.toBinaryString( subject.getState() ) ); 
   }
}
public class HexaObserver extends Observer{
 
   public HexaObserver(Subject subject){
      this.subject = subject;
      this.subject.attach(this);
   }
 
   @Override
   public void update() {
      System.out.println( "Hex String: "  + Integer.toHexString( subject.getState() ).toUpperCase() ); 
   }
}

2.1.2 定義被觀察對象

import java.util.ArrayList;
import java.util.List;
//被觀察對象 
public class Subject {
   //觀察者列表
   private List<Observer> observers = new ArrayList<Observer>();
   
   private int state;
 
   public int getState() {
      return state;
   }
   public void attach(Observer observer){
      observers.add(observer);      
   }
   
   //通知所有觀察者
   public void notifyAllObservers(){
      for (Observer observer : observers) {
         observer.update();
      }
   }  
 	//修改數(shù)據(jù)時,通知所有觀察者
   public void setState(int state) {
      this.state = state;
      notifyAllObservers();
   }
}

2.1.3 使用

public class ObserverPatternDemo {
   public static void main(String[] args) {
   	  //創(chuàng)建被觀察對象
      Subject subject = new Subject();
 	  //創(chuàng)建觀察者對象
      new HexaObserver(subject);
      new BinaryObserver(subject);
      
 	  //創(chuàng)建被觀察對象調(diào)用setState時,通知國有觀察者
      System.out.println("First state change: 15");   
      subject.setState(15);
      System.out.println("Second state change: 10");  
      subject.setState(10);
   }
}

2.2 JDK源碼 —— Observable

2.2.1 觀察者接口Observer

public interface Observer {
    void update(Observable o, Object arg);
}

2.2.1 被觀察者對象Observable

public class Observable {
    private boolean changed = false;
    
    private Vector<Observer> obs;
    //添加觀察者
	public synchronized void addObserver(Observer o) {
        if (o == null)
            throw new NullPointerException();
        if (!obs.contains(o)) {
            obs.addElement(o);
        }
    }
    //通知觀察者
    public void notifyObservers(Object arg) {
        Object[] arrLocal;
        synchronized (this) {
            if (!changed)
                return;
            arrLocal = obs.toArray();
            clearChanged();
        }

        for (int i = arrLocal.length-1; i>=0; i--)
            ((Observer)arrLocal[i]).update(this, arg);
    }
}

2.3 Spring源碼 —— AbstractApplicationContext

2.3.1 觀察者

public class ContextStartedEvent extends ApplicationContextEvent {
    public ContextStartedEvent(ApplicationContext source) {
        super(source);
    }
}

public class ContextStoppedEvent extends ApplicationContextEvent {
    public ContextStoppedEvent(ApplicationContext source) {
        super(source);
    }
}

public class ContextRefreshedEvent extends ApplicationContextEvent {
    public ContextRefreshedEvent(ApplicationContext source) {
        super(source);
    }
}

2.3.2 被觀察者

public abstract class AbstractApplicationContext extends DefaultResourceLoader implements ConfigurableApplicationContext {
	//觀察者集合
	private Set<ApplicationEvent> earlyApplicationEvents;
	//添加觀察者Event
	public void publishEvent(ApplicationEvent event) {
        this.publishEvent(event, (ResolvableType)null);
    }
	//通知觀察者Event
    protected void registerListeners() {
        Iterator var1 = this.getApplicationListeners().iterator();

        while(var1.hasNext()) {
            ApplicationListener<?> listener = (ApplicationListener)var1.next();
            this.getApplicationEventMulticaster().addApplicationListener(listener);
        }

        String[] listenerBeanNames = this.getBeanNamesForType(ApplicationListener.class, true, false);
        String[] var7 = listenerBeanNames;
        int var3 = listenerBeanNames.length;

        for(int var4 = 0; var4 < var3; ++var4) {
            String listenerBeanName = var7[var4];
            this.getApplicationEventMulticaster().addApplicationListenerBean(listenerBeanName);
        }

        Set<ApplicationEvent> earlyEventsToProcess = this.earlyApplicationEvents;
        this.earlyApplicationEvents = null;
        if (!CollectionUtils.isEmpty(earlyEventsToProcess)) {
            Iterator var9 = earlyEventsToProcess.iterator();

            while(var9.hasNext()) {
                ApplicationEvent earlyEvent = (ApplicationEvent)var9.next();
                this.getApplicationEventMulticaster().multicastEvent(earlyEvent);
            }
        }

    }
}

2.3 Guava源碼 —— EventBus

public class EventBus {
	//注冊訂閱者(觀察者)
	public void register(Object object) {
        this.subscribers.register(object);
    }
    //通知訂閱者(觀察者)
	public void post(Object event) {
        Iterator<Subscriber> eventSubscribers = this.subscribers.getSubscribers(event);
        if (eventSubscribers.hasNext()) {
            this.dispatcher.dispatch(event, eventSubscribers);
        } else if (!(event instanceof DeadEvent)) {
            this.post(new DeadEvent(this, event));
        }

    }
}

三、其他設(shè)計模式

創(chuàng)建型模式
結(jié)構(gòu)型模式

  • 1、設(shè)計模式——裝飾器模式(Decorator Pattern)+ Spring相關(guān)源碼

行為型模式文章來源地址http://www.zghlxwxcb.cn/news/detail-735521.html

  • 1、設(shè)計模式——訪問者模式(Visitor Pattern)+ Spring相關(guān)源碼
  • 2、設(shè)計模式——中介者模式(Mediator Pattern)+ JDK相關(guān)源碼
  • 3、設(shè)計模式——策略模式(Strategy Pattern)+ Spring相關(guān)源碼
  • 4、設(shè)計模式——狀態(tài)模式(State Pattern)
  • 5、設(shè)計模式——命令模式(Command Pattern)+ Spring相關(guān)源碼
  • 6、設(shè)計模式——觀察者模式(Observer Pattern)+ Spring相關(guān)源碼
  • 7、設(shè)計模式——備忘錄模式(Memento Pattern)
  • 8、設(shè)計模式——模板方法模式(Template Pattern)+ Spring相關(guān)源碼
  • 9、設(shè)計模式——迭代器模式(Iterator Pattern)+ Spring相關(guān)源碼
  • 10、設(shè)計模式——責(zé)任鏈模式(Chain of Responsibility Pattern)+ Spring相關(guān)源碼
  • 11、設(shè)計模式——解釋器模式(Interpreter Pattern)+ Spring相關(guān)源碼

到了這里,關(guān)于設(shè)計模式——觀察者模式(Observer Pattern)+ Spring相關(guān)源碼的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【設(shè)計模式-06】Observer觀察者模式

    【設(shè)計模式-06】Observer觀察者模式

    事件處理模型 場景示例:小朋友睡醒了哭,餓! 核心思路和邏輯 定義事件類 ActionEvent 定義接口類 ActionListener 和接口方法 void actionPerformed(ActionEvent e); 自定義 Button 類,模擬按鈕點擊事件 自定義監(jiān)聽者 MyActionEventListener 和 MyActionEventListener2 實現(xiàn)接口 void actionPerformed(ActionEvent

    2024年01月17日
    瀏覽(16)
  • 「觀察者(Observer)」設(shè)計模式 Swift實現(xiàn)

    「觀察者(Observer)」設(shè)計模式 Swift實現(xiàn)

    觀察者設(shè)計模式(Observer Pattern)是一種行為型設(shè)計模式,它定義了對象之間的一種一對多的依賴關(guān)系,使得當一個對象的狀態(tài)發(fā)生變化時,所有依賴于它的對象都會受到通知并自動更新。 在這種模式中,被觀察者對象(Subject)存儲其觀察者對象(Observer)列表,并提供了用

    2024年02月16日
    瀏覽(25)
  • 行為型-觀察者模式(Observer Pattern)

    詳細介紹觀察者模式(Observer Pattern),并說明優(yōu)缺點與使用場景: 觀察者模式是一種行為型設(shè)計模式,它定義了對象之間的一種一對多的依賴關(guān)系,使得當一個對象的狀態(tài)發(fā)生變化時,所有依賴它的對象都會自動收到通知并更新。該模式包含兩個核心角色:被觀察者(Subj

    2024年02月15日
    瀏覽(18)
  • 【設(shè)計模式——學(xué)習(xí)筆記】23種設(shè)計模式——觀察者模式Observer(原理講解+應(yīng)用場景介紹+案例介紹+Java代碼實現(xiàn))

    【設(shè)計模式——學(xué)習(xí)筆記】23種設(shè)計模式——觀察者模式Observer(原理講解+應(yīng)用場景介紹+案例介紹+Java代碼實現(xiàn))

    有一個天氣預(yù)報項目,需求如下: 氣象站可以將每天測量到的溫度、濕度、氣壓等等以公告的形式發(fā)布出去(比如發(fā)布到自己的網(wǎng)站或第三方) 需要設(shè)計開放型API,便于其他第三方也能接入氣象站獲取數(shù)據(jù) 提供溫度、氣壓、濕度的接口 測量數(shù)據(jù)更新時,要能實時的通知給第三

    2024年02月14日
    瀏覽(20)
  • (三)行為模式:7、觀察者模式(Observer Pattern)(C++示例)

    (三)行為模式:7、觀察者模式(Observer Pattern)(C++示例)

    目錄 1、觀察者模式(Observer Pattern)含義 2、觀察者模式的UML圖學(xué)習(xí) 3、觀察者模式的應(yīng)用場景 4、觀察者模式的優(yōu)缺點 (1)優(yōu)點: (2)缺點 5、C++實現(xiàn)觀察者模式的實例 1、觀察者模式(Observer Pattern)含義 觀察者模式(Observer)定義了一種一對多的依賴關(guān)系,讓多個觀察者

    2024年02月09日
    瀏覽(22)
  • 觀察者模式(Observer)

    觀察者模式(Observer)

    事件訂閱者者(Event-Subscriber) 監(jiān)聽者(Listener) 觀察者 是一種行為設(shè)計模式, 允許你定義一種訂閱機制, 可在對象事件發(fā)生時通知多個“觀察”該對象的其他對象。 1. 問題 假如你有兩種類型的對象 :“顧客”和“商店”。顧客對某個特定品牌的產(chǎn)品非常感興趣(例如最

    2024年02月12日
    瀏覽(20)
  • 觀察者模式(Observer)

    觀察者模式(Observer)

    觀察著模式是一種行為設(shè)計模式,可以用來定義對象間的一對多依賴關(guān)系,使得每當一個對象狀態(tài)發(fā)生改變時,其相關(guān)依賴對象皆得到通知并被自動更新。 觀察者模式又叫做發(fā)布-訂閱(Publish/Subscribe)模式、模型-視圖(Model/View)模式、源-監(jiān)聽器(Source/Listener)模式或從屬者

    2024年02月14日
    瀏覽(24)
  • 設(shè)計模式——觀察者模式

    設(shè)計模式——觀察者模式

    觀察者模式可以分為觀察者和被觀察者,觀察者通過注冊到一個被觀察者中,也可視為訂閱,當被觀察者的數(shù)據(jù)發(fā)生改變時,會通知到觀察者,觀察者可以據(jù)此做出反應(yīng)。 可以類比訂閱報紙,報社就是被觀察者,訂閱者就是觀察者,訂閱者通過訂閱報紙與報社建立聯(lián)系,而報

    2024年02月15日
    瀏覽(18)
  • 【設(shè)計模式】觀察者模式

    【設(shè)計模式】觀察者模式

    觀察者模式(又被稱為發(fā)布-訂閱(Publish/Subscribe)模式,屬于行為型模式的一種,它定義了一種一對多的依賴關(guān)系,讓多個觀察者對象同時監(jiān)聽某一個主題對象。這個主題對象在狀態(tài)變化時,會通知所有的觀察者對象,使他們能夠自動更新自己。 Subject:抽象主題(被觀察者

    2024年02月13日
    瀏覽(20)
  • 設(shè)計模式---觀察者模式

    1,概念 ????????屬于行為模式的一種,定義了一種一對多的依賴關(guān)系,讓多個觀察者對象同時監(jiān)聽某一對象主題對象,這個主題對象在狀態(tài)變化時,會通知所有的觀察者對象,使他們能夠自動更新自己。 在觀察者模式中有如下角色: Subject:抽象主題(抽象被觀察者),

    2024年02月15日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包