Java观察者模式示例

可运行示例。

大家在平时工作和学习中都是如何运用观察者模式的,分享下,哈。。。也讨论下其主要运用场景。

上代码:

package com.gannalyo.observer;

import java.util.Observable;

/**
 * One observable tool, it means like a broadcast.
 * 
 * @author Gannalyo
 * @since 2018-07-26
 */
public class MyObservable extends Observable {
	private String data = "";

	public String getData() {
		return data;
	}

	public void setData(String data) {
		// the value will be never null for this.data
		if (data != null && !data.equals(this.data)) {
			this.data = data;
			// a mark for changing to data
			setChanged();
		}

		// to notify all observers when the data was changed
		notifyObservers();
	}

}
package com.gannalyo.observer;

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

/**
 * Observer
 * 
 * @author Gannalyo
 * @since 2018-07-26
 */
public class AObserver implements Observer {

	@Override
	public void update(Observable arg0, Object arg1) {
		System.out.println("The Observer A receives the new data [" + ((MyObservable) arg0).getData() + "].");
	}

}
package com.gannalyo.observer;

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

/**
 * Observer
 * 
 * @author Gannalyo
 * @since 2018-07-26
 */
public class BObserver implements Observer {

	@Override
	public void update(Observable arg0, Object arg1) {
		System.out.println("The Observer B receives the new data [" + ((MyObservable) arg0).getData() + "].");
	}

}
package com.gannalyo.observer;

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

/**
 * Observer
 * 
 * @author Gannalyo
 * @since 2018-07-26
 */
public class CObserver implements Observer {

	@Override
	public void update(Observable arg0, Object arg1) {
		System.out.println("The Observer C receives the new data [" + ((MyObservable) arg0).getData() + "].");
	}

}
package com.gannalyo.observer;

import java.util.Scanner;

/**
 * To exercise the Observer Design for Java.
 * 
 * @author Gannalyo
 * @since 2018-07-26
 */
public class ObserverDesignTesting {

	public static void main(String[] args) {
		MyObservable observer = new MyObservable();

		AObserver aObserver = new AObserver();
		BObserver bObserver = new BObserver();
		CObserver cObserver = new CObserver();

		observer.addObserver(aObserver);
		observer.addObserver(bObserver);
		observer.addObserver(cObserver);

		System.out.println("Please type your broadcast information:");
		Scanner scanner = new Scanner(System.in);
		while (true) {
			String msg = scanner.nextLine();
			if ("ok".equalsIgnoreCase(msg)) {
				System.err.println("See you!");
				break;
			} else if ("add a".equalsIgnoreCase(msg)) {// append an observer
				observer.addObserver(aObserver);
			} else if ("add b".equalsIgnoreCase(msg)) {
				observer.addObserver(aObserver);
			} else if ("add c".equalsIgnoreCase(msg)) {
				observer.addObserver(aObserver);
			} else if ("del a".equalsIgnoreCase(msg)) {// delete an observer
				observer.deleteObserver(aObserver);
			} else if ("del b".equalsIgnoreCase(msg)) {
				observer.deleteObserver(aObserver);
			} else if ("del c".equalsIgnoreCase(msg)) {
				observer.deleteObserver(aObserver);
			}

			System.out.println("Currently, the Observer count is [" + observer.countObservers() + "]。");
			observer.setData(msg);

			try {
				Thread.sleep(300);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		scanner.close();
	}

}

 

转载于:https://my.oschina.net/u/3901290/blog/1865312

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值