觀察者模式之雙十一購(gòu)物

構(gòu)造了一個(gè)雙十一購(gòu)物的場(chǎng)景,重溫一下對(duì)觀察者模式的理解。

假如,我們有一個(gè)變量count,當(dāng)購(gòu)買一件商品時(shí),這個(gè)數(shù)字加1,退貨一件商品時(shí)這個(gè)數(shù)字減1。我們還有金幣和積分兩個(gè)業(yè)務(wù)模塊,這兩個(gè)模塊里的金幣和積分都和前面說(shuō)的變量相關(guān)。這就需要當(dāng)變量發(fā)生變化,能通知到我們的金幣業(yè)務(wù)模塊和積分業(yè)務(wù)模塊。我們的金幣模塊和積分模塊作為觀察者去觀察變量count(被觀察者), 當(dāng)購(gòu)買行為和退貨行為使變量count發(fā)生變化時(shí),就會(huì)遍歷去通知每一個(gè)監(jiān)聽(tīng)(觀察)了count的觀察者。

下面看看代碼:

//******************************觀察者接口*********************************//

package designPattern.observerMode;

public interface CountObserver {

void onChange(int count);

}

//*************************觀察者1:金幣業(yè)務(wù)類***********************//

package designPattern.observerMode;

//金幣相關(guān)的業(yè)務(wù)類

public class BusinessGold ?implements CountObserver{

private int goldNumber = 0;

public BusinessGold() {

}

@Override

public void onChange(int count) {

goldNumber = count;

System.out.println("金幣業(yè)務(wù)類收到通知:還剩下" + goldNumber + "個(gè)金幣");

}

}

//**********************觀察者2:積分業(yè)務(wù)*************************//

package designPattern.observerMode;

//積分相關(guān)的業(yè)務(wù)類

public class BusinessScore implements CountObserver {

private int scoreNumber = 0;

public BusinessScore() {

}

@Override

public void onChange(int count) {

scoreNumber = count;

System.out.println("積分業(yè)務(wù)類收到通知:您有" + scoreNumber + "個(gè)積分");

}

}

//*************************被觀察者****************************//

package designPattern.observerMode;

import java.util.ArrayList;

//被觀察者

public class Counter {

int count = 10;

static Counter counter = null;

ArrayList observerList = new ArrayList();

private Counter() {

}

public static Counter getInstance() {

if (counter == null)

counter = new Counter();

return counter;

}

public void add() {

count++;

notifyObservers();

}

public void delete() {

count--;

notifyObservers();

}

public void register(CountObserver observer) {

observerList.add(observer);

}

public void unRegister(CountObserver observer) {

observerList.remove(observer);

}

private void notifyObservers() {

for (CountObserver observer : observerList) {

observer.onChange(count);

}

}

}

//*****************************雙十一購(gòu)物活動(dòng)*************************//

package designPattern.observerMode;

//雙十一購(gòu)物狂歡

public class ShoppingActivity {

Counter counter;

public ShoppingActivity() {

}

/**

* 初始化監(jiān)聽(tīng)

*/

public void initActivity() {

counter = Counter.getInstance();

BusinessGold businessGold = new BusinessGold();

BusinessScore businessScore = new BusinessScore();

counter.register(businessGold);

counter.register(businessScore);

}

/**

* 購(gòu)買一件商品

*/

public void buy() {

System.out.println("我買了買1件商品。贈(zèng)送1個(gè)金幣和1個(gè)積分");

counter.add();

}

/**

* 退貨

*/

public void cancelOrder() {

System.out.println("我退了1件商品??廴?個(gè)金幣和1個(gè)積分");

counter.delete();

}

}

//*****************************調(diào)用入口*****************************//

package designPattern.observerMode;

public class Main {

public static void main(String[] args) {

ShoppingActivity activity = new ShoppingActivity();

activity.initActivity();

activity.buy();

activity.cancelOrder();

}

}

運(yùn)行結(jié)果:

我買了買1件商品。贈(zèng)送1個(gè)金幣和1個(gè)積分

金幣業(yè)務(wù)類收到通知:還剩下11個(gè)金幣

積分業(yè)務(wù)類收到通知:您有11個(gè)積分

我退了1件商品。扣去1個(gè)金幣和1個(gè)積分

金幣業(yè)務(wù)類收到通知:還剩下10個(gè)金幣

積分業(yè)務(wù)類收到通知:您有10個(gè)積分

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,544評(píng)論 19 139
  • 1 場(chǎng)景問(wèn)題# 1.1 訂閱報(bào)紙的過(guò)程## 來(lái)考慮實(shí)際生活中訂閱報(bào)紙的過(guò)程,這里簡(jiǎn)單總結(jié)了一下,訂閱報(bào)紙的基本流程...
    七寸知架構(gòu)閱讀 4,804評(píng)論 5 57
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 34,644評(píng)論 18 399
  • 觀察者模式定義了一種一對(duì)多的依賴關(guān)系,讓多個(gè)觀察者對(duì)象同時(shí)監(jiān)聽(tīng)某一個(gè)主題對(duì)象。這個(gè)主題對(duì)象在狀態(tài)上發(fā)生變化時(shí),會(huì)通...
    扈扈哈嘿閱讀 1,442評(píng)論 0 12
  • 早起上班的路上
    一顆無(wú)處安放的靈魂閱讀 242評(píng)論 0 0

友情鏈接更多精彩內(nèi)容