日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

观察者模式--模拟3D彩票公众号

發(fā)布時(shí)間:2025/3/21 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 观察者模式--模拟3D彩票公众号 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一 觀察者模式定義:

  觀察者模式又叫發(fā)布-訂閱模式,它定義了一種一對(duì)多的依賴關(guān)系,多個(gè)觀察者對(duì)象可同時(shí)監(jiān)聽某一主題對(duì)象,當(dāng)該主題對(duì)象狀態(tài)發(fā)生變化時(shí),相應(yīng)的所有觀察者對(duì)象都可收到通知。

二 觀察者模式類圖

三 觀察者模式角色劃分

1)主題,抽象類或者接口

2)具體主題

3)觀察者

4)具體觀察者

四 觀察者模式實(shí)例

1)、服務(wù)號(hào)就是主題,業(yè)務(wù)就是推送消息

2)、觀察者只需要訂閱主題,只要有新的消息就會(huì)送來

3)、當(dāng)不想要此主題消息時(shí),取消訂閱

4)、只要服務(wù)號(hào)還在,就會(huì)一直有人訂閱

本實(shí)例模擬3D彩票服務(wù),和部分訂閱者。

1.主題接口和觀察者接口

/**
* 主題接口,所有的主題必須實(shí)現(xiàn)此接口
*/
public interface Subject
{
  /**
  * 注冊(cè)一個(gè)觀察著
  *
  * @param observer
  */
  public void registerObserver(Observer observer);

  /**
  * 移除一個(gè)觀察者
  *
  * @param observer
  */
  public void removeObserver(Observer observer);

  /**
  * 通知所有的觀察著
  */
  public void notifyObservers();
}
2.所有觀察者都需要實(shí)現(xiàn)這個(gè)接口

?public interface Observer?{

  public void update(String msg);

}

3.3D服務(wù)號(hào)的實(shí)現(xiàn)


import java.util.ArrayList;

import java.util.List;


public class ObjectFor3D implements Subject
{
  private List<Observer> observers = new ArrayList<Observer>();
  /**
  * 3D彩票的號(hào)碼
  */
  private String msg;  

  @Override

  public void registerObserver(Observer observer){
    observers.add(observer);
  }

  @Override  public void removeObserver(Observer observer){

    int index = observers.indexOf(observer);
    if (index >= 0)
    {
      observers.remove(index);
    }
  }

  @Override
  public void notifyObservers()
  {
    for (Observer observer : observers)
    {
      observer.update(msg);
    }
  }
  /**
  * 主題更新消息
  *
  * @param msg
  */
  public void setMsg(String msg)
  {
    this.msg = msg;
    notifyObservers();
  }

}

4.模擬兩個(gè)使用者

4.1第一個(gè)使用者

public class Observer1 implements Observer
{
  private Subject subject;
  public Observer1(Subject subject)
  {
    this.subject = subject;
    subject.registerObserver(this);
  }

  @Override
  public void update(String msg)
  {
    System.out.println("observer1 得到 3D 號(hào)碼 -->" + msg + ", 我要記下來。");
   }
}
4.2第二個(gè)使用者


public class Observer2 implements Observer
{
  private Subject subject ;

  public Observer2(Subject subject)
  {
    this.subject = subject ;
    subject.registerObserver(this);
  }

  @Override
  public void update(String msg)
  {
    System.out.println("observer2 得到 3D 號(hào)碼 -->" + msg + "我要告訴舍友們。");
  }
}
服務(wù)號(hào)中維護(hù)了所有向它訂閱消息的使用者,當(dāng)服務(wù)號(hào)有新消息時(shí),通知所有的使用者。整個(gè)架構(gòu)是一種松耦合,主題的實(shí)現(xiàn)不依賴與使用者,當(dāng)增加新的使用者時(shí),主題的代碼不需要改變;使用者如何處理得到的數(shù)據(jù)與主題無關(guān)。

5.測(cè)試代碼

public class Test
{
  public static void main(String[] args)
  {
    //模擬一個(gè)3D的服務(wù)號(hào)
    ObjectFor3D subjectFor3d = new ObjectFor3D();
    //客戶1
    Observer observer1 = new Observer1(subjectFor3d);
    Observer observer2 = new Observer2(subjectFor3d);

    subjectFor3d.setMsg("20140420的3D號(hào)碼是:127" );
    subjectFor3d.setMsg("20140421的3D號(hào)碼是:333" );
  }
}

五 觀察者模式的優(yōu)缺點(diǎn)

觀察者模式優(yōu)點(diǎn)
  抽象主題只依賴于抽象觀察者
  觀察者模式支持廣播通信
  觀察者模式使信息產(chǎn)生層和響應(yīng)層分離
觀察者模式缺點(diǎn)
  如一個(gè)主題被大量觀察者注冊(cè),則通知所有觀察者會(huì)花費(fèi)較高代價(jià)
  如果某些觀察者的響應(yīng)方法被阻塞,整個(gè)通知過程即被阻塞,其它觀察者不能及時(shí)被通知

?

實(shí)例鏈接:https://github.com/youlookwhat/DesignPattern/tree/master/app/src/main/java/com/example/jingbin/designpattern/observer

?

轉(zhuǎn)載于:https://www.cnblogs.com/zhouhaocode/p/9832362.html

總結(jié)

以上是生活随笔為你收集整理的观察者模式--模拟3D彩票公众号的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。