观察者模式

观察者(Observer)模式又名发布-订阅(Publish/Subscribe)模式。GOF给观察者模式如下定义:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

 

 

我们打开微博的时候,在首页上可以看到,好友微博的更新状态。这里有个问题,就是我们又怎么知道好友发布了微博呢?

 

这是怎么实现的呢?观察者模式,应该就是它啦!!!呵呵~~~

 

 

代码如下:

 

WeiboUser类(具体的目标角色)

 

 

import java.util.Observable;

public class WeiboUser extends Observable{

	private String name;
	/*
	 * 发布一条微博
	 */
	public void publicOneWeibo(String weibo){
		setChanged();
		notifyObservers(weibo);
		System.out.println("发布成功");
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	public String getName() {
		return name;
	}

}

 

 

weiboFriend类(具体的观察者角色)

 

 

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

/**
 * @author Administrator
 *
 */
public class WeiboFriend implements Observer{

	private String name;
	
	@Override
	public void update(Observable o, Object arg) {
		// TODO Auto-generated method stub
		Invoker invoker = new Invoker(o, arg);
		Thread thread = new Thread(invoker);
		thread.start();
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	public String getName() {
		return name;
	}
	
	
	class Invoker implements Runnable{
		private Observable object;
		private Object arg;
		public Invoker(Observable o, Object arg){
			this.object = o;
			this.arg = arg;
		}
		@Override
		public void run() {
			// TODO Auto-generated method stub
			WeiboUser weiboUser = (WeiboUser) object;
			System.out.println(name +" 接收到了 "+weiboUser.getName() + " 发布的一条微博:"+this.arg);
		}
	}
}

 

 

Client场景类

 

 

public class Client {

	public static void main(String []args){
		WeiboUser weiboUser = new WeiboUser();
		weiboUser.setName("zhengguizhong");
		WeiboFriend weiboFriend1 = new WeiboFriend();
		weiboFriend1.setName("哈喽didang");
		WeiboFriend weiboFriend2 = new WeiboFriend();
		weiboFriend2.setName("十二根竹");
		weiboUser.addObserver(weiboFriend1);   //添加好友
		weiboUser.addObserver(weiboFriend2);   
		weiboUser.publicOneWeibo("乔帮主,一路走好!!!");
	}
}

 

 

例子很简单,在weiboFriend类中有个内部类,自己用来测试异步观察者模式的,就是添加一个线程,so easy!!!

 

 

观察者模式的优点:

1、使观察者和被观察者的关系变成松耦合。

2、要添加观察值非常方便,只要是实现Observer的类就可以,符合开-闭原则。

3、被观察的目标对象的状态发生改变时,所有依赖于它的对象都可以得到通知并被自动更新。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值