1. 程式人生 > >學習觀察者模式的一個例子

學習觀察者模式的一個例子

昨天看了beckrabbit寫的聖鬥士星矢的狀態模式和觀察者模式文章之後對觀察者模式又了新的認識,以前一直都是從書中學習設計模式的。看了這篇文章後感覺很形象。於是就寫了一個小程式,可能很多人都聽這個。程式的原理就是貓叫--老鼠跑--人醒。這裡我寫的是一個連續發生的。而不是貓叫的同時老鼠和人同時發生動作。因為我是剛才設計模式所以程式碼寫的不好請大家多多指教。

我的想法是一個觀察一個。也就是老鼠觀察貓的,人觀察老鼠的。所以首先貓是被觀察者,而老鼠即是觀察者也是被觀察者。人就是老鼠的觀察者。
程式碼如下:

首先我建立了三個類,分別是貓的,老鼠的和人的。
貓的類

package com.lhsm.observer;

import java.util.Observable;

public class Cat extends Observable {


public void catCall(){
this.setChanged();
this.notifyObservers("貓叫了");

}
}

老鼠的類

package com.lhsm.observer;

import java.util.Observable;
import java.util.Observer;

public class Mouse extends Observable implements Observer {

public void update(Observable arg0, Object arg1) {
// TODO Auto-generated method stub
System.out.println(arg1);
Observer person = new Person();
this.clearChanged();
this.addObserver(person);
this.setChanged();
this.notifyObservers("老鼠跑");
}

}

人的類

package com.lhsm.observer;

import java.util.Observable;
import java.util.Observer;

public class Person implements Observer {

public void update(Observable arg0, Object arg1) {
// TODO Auto-generated method stub
System.out.println(arg1);
System.out.println("人醒");
}

}

下面是主方法的測試類

package com.lhsm.observer;

import java.util.Observer;

public class TestMain {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Cat cat = new Cat();

Observer mouse = new Mouse();

cat.addObserver(mouse);

cat.catCall();
}

}

執行結果

貓叫了
老鼠跑
人醒

相關推薦

學習觀察模式一個例子

昨天看了beckrabbit寫的聖鬥士星矢的狀態模式和觀察者模式文章之後對觀察者模式又了新的認識,以前一直都是從書中學習設計模式的。看了這篇文章後感覺很形象。於是就寫了一個小程式,可能很多人都聽這個。程式的原理就是貓叫-

vue原始碼學習——觀察模式

情景:接觸過vue的同學都知道,我們曾經都很好奇為什麼vue能這麼方便的進行資料處理,當一個物件的某個狀態改變之後,只要依賴這個資料顯示的部分也會發生改變,如果你依舊很好奇,那麼今天你就可以瞭解一下實現的原理 什麼是觀察者模式​​​​​​​    官方解釋是

java常用設計模式--觀察模式簡單例子

package com.ruanyun;import java.util.List;import java.util.Vector;/** * @Auther: maxw * @Date: 2018/11/10 16:14 * @Description:觀察者模式 * 基本概念: * 觀察者模式屬於行為型模式

設計模式學習——觀察模式

觀察者模式 定義:定義物件間一種一對多的依賴關係,使得每當一個物件發生變化時,則所有依賴於他的物件都會得到通知並自動更新。 使用場景 關聯行為場景 事件多級觸發場景 跨系統的訊息交換場景,如訊息佇列、事件匯流排的處理機制 特點:實現物件的解耦,將觀察

Java設計模式知識學習-----觀察模式

定義 出版社+訂閱者=觀察者模式,其中出版社改成為‘主題’,訂閱者改稱為‘觀察者’。觀察者模式定義了物件之間的一對多依賴關係,當一個物件改變狀態時,他的所有依賴者都會收到通知並且自動更新。這裡和訂閱報紙是一樣的道理,當出版社有了新報紙,那麼所有訂閱了該報紙的人

C#設計模式---觀察模式簡單例子

在開發過程中經常遇到一個模組中的 一個方法呼叫了其他模組中相關的方法 比如說在一個系統中,如果出現了錯誤,就呼叫專門進行錯誤處理的模組中的方法進行錯誤處理 而因為錯誤處理的操作有很多,所以將這些具體的操作封裝在其他的模組中 在專門進行錯誤處理的模組中呼叫其他模組中的錯誤操作

一個簡單的觀察模式例子

一:下面的這個類是核心類 public class NotificationCenter { //static reference for singleton private static NotificationCenter _instance; priv

設計模式學習(二)“觀察模式” (C#)

original pan 學習筆記 pri 接口 program date contain 兩個 《深入淺出設計模式》學習筆記第二章 需求: 開發一套氣象監測應用,如圖: 氣象站,目前有三種裝置,溫度、濕度和氣壓感應裝置。 WeatherData對象追蹤氣象站的數據,並更

設計模式學習(二): 觀察模式 (C#)

模式 album 預報 其中 需求 學習 應用 bsp 要求 《深入淺出設計模式》學習筆記第二章 需求: 開發一套氣象監測應用,如圖: 氣象站,目前有三種裝置,溫度、濕度和氣壓感應裝置。 WeatherData對象追蹤氣象站的數據,並更新到布告板,布告板(目前是三個:目前狀

模板方法模式 + 觀察模式 + 簡單工廠模式 + 單例模式實現一個簡單的數據表讀寫

private 數據庫鏈 obs imp 通知 model 數據表 ring pri 實現功能: 對數據表的讀要緩存起來,對數據表的寫需要清除緩存. 數據表根據屬性字段來決定是否緩存 可以更換數據庫鏈接方式,比如可以隨時更換為mysql或mysqli() 當插入數據時給出一

VUE學習之--觀察模式

prop 江湖 雷鳴 天下 功夫 auth 技術 同時 也有 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px ".PingFang SC"; color: #454545 } span.s1 { font: 12.0

一個可暫停的觀察模式分析

true 變化 項目 https err == 性能 缺失 ati 一,觀察者模式 1、概念介紹   觀察者模式(Observer)完美的將觀察者和被觀察的對象分離開。舉個例子,用戶界面可以作為一個觀察者,業務數據是被觀察者,用戶界面觀察業務數據的變化,發現數據變化後,就顯

Ruby設計模式-觀察模式學習筆記

nco utf-8 upd attr ttr rim chan utf ade observer.rb #!/bin/env ruby # encoding: utf-8 require ‘observer‘ class CriminalMovement incl

設計模式學習筆記-觀察模式

連結:http://www.cnblogs.com/wangjq/archive/2012/07/12/2587966.html 1. 概述   有時被稱作釋出/訂閱模式,觀察者模式定義了一種一對多的依賴關係,讓多個觀察者物件同時監聽某一個主題物件。這個主題物件在狀態發生變化時,會通知

Android設計模式學習觀察模式

蒐集的資料: http://blog.csdn.net/banketree/article/details/24985607  Android 設計模式 http://mobile.51cto.com/ahot-418968.htm  Android進階之大話設

設計模式學習(三) 觀察模式

引入 定義:定義了物件之間的一對多依賴,這樣一來,當一個物件改變狀態時,他的所有依賴都會收到通知並自動更新。 認識觀察者模式 例子:報紙和雜誌的訂閱 1.報社的業務就是出版報紙 2.向某家報社訂閱報紙,只要有新的報紙出版,就會一直為你送報紙 3.當你取消了訂閱後,

Java設計模式學習記錄-觀察模式

前言 觀察者模式也是物件行為模式的一種,又叫做發表-訂閱(Publish/Subscribe)模式、模型-檢視(Model/View)模式、 咱們目前用的最多的就是各種MQ(Message Queue)都是基於這個模式的思想來實現的,生產者產生資料放到一個佇列中,消費者觀察生產者的訊息佇列的變化,從而接收訊

手寫一個觀察模式(JAVA Demo)

首先理解一下觀察者模式的定義:       定義物件間一種一對多的依賴關係,使得每當一個物件改變狀態,則所有依賴於它的物件都會得到通知並被自動更新。 直譯:       建立一個一(Subject)對多(Observer)的關係,能夠使得當"一"變化的時候,依賴這個"一

觀察模式(Kotlin)學習心得

一、被觀察者(Demo中的角色:ZhengFuObservable) (ZhengFuObservable)政府相關政策發生改變,立即通知它的觀察者。具體原始碼實現如下所示: package com.study.observer import java.util

快速學習——10、委託、事件-觀察模式(一)

這篇我們先不講委託事件,從一些理論來 物件直接的關係 一對一 :人只有一個身份證號碼 一對多:一個人可以有多個號碼 (qq號 電話號 車牌號 等) 多對多:多個人 多個號碼   觀察者模式 觀察者模式,又稱為釋出訂閱模式,基於一對多的原理。 定義了物件之間的一對