5.观察者模式

据我印象中得知,观察者模式好像是我所知道的一个最好理解的设计模式。

当时也是在看《head first》这本书的时候看到观察者模式——书中“气象观测站”的例子,其实一言以蔽之,就是那个订报的一个模式就是了!

观察者模式让多个观察者对象同时监听某一个主题对象。这个主题对象在其状态发生变化时会通知所有观察者对象,使它们能够做出响应。观察者模式又叫发布
-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。

示例代码(其实很好懂的):

public abstract class Subject {
	private List<Observer> list = new ArrayList<Observer>(); //注册的观察者对象
	public void attach(Observer observer){ // 注册观察者对象
		list.add(observer);
		System.out.println("Attached an observer");
	}
	public void detach(Observer observer){ // 删除观察者对象
		list.remove(observer);
	}
	public void nodifyObservers(String newState){ //通知所有注册的观察者对象
		for(Observer observer : list){
			observer.update(newState);
		}
	}
}
public class ConcreteSubject extends Subject{
	private String state;
	public String getState() {
		return state;
	}
	public void change(String newState){
		state = newState;
		System.out.println("主题状态为: " + state);
		this.nodifyObservers(state); //状态发生改变,通知各个观察者
	}
}
public interface Observer {
	public void update(String state); //更新的状态
}
public class ConcreteObserver implements Observer {
	private String observerState; //观察者的状态
	@Override
	public void update(String state) {
		observerState = state; //更新观察者的状态,使其与目标的状态保持一致
		System.out.println("状态为: "+observerState);
	}
}
public class Client {
	public static void main(String[] args) {
		ConcreteSubject subject = new ConcreteSubject(); //创建主题对象
		Observer observer = new ConcreteObserver(); //创建观察者对象
		subject.attach(observer); //将观察者对象登记到主题对象上
		subject.change("new state"); //改变主题对象的状态
	}
}


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值