设计模式 观察者模式

本文介绍了观察者模式的组成部分,包括观察者角色、具体观察者、通知者角色和具体通知者。在Java中,这些角色通常通过接口实现。观察者角色有一个update()方法,而通知者角色具备add()、delete()和notify()方法,用于添加、移除和通知观察者。当调用notify()时,所有已注册的观察者都会执行update()方法。观察者模式的核心是封装一个包含观察者对象的列表,并提供管理这些对象的方法,实现了对象行为的抽象和事件传递。

观察者模式两部分,两个部分共四个角色 ,两部分分别是观察者部分和通知者部分,观察者部分有 观察者角色,具体观察者角色,通知者部分有通知者角色,具体通知者角色,一般在java中,观察者角色和通知者角色为接口,具体观察者和具体通知者是对观察者和通知者的实现类。

一般观察者角色只要有一个方法,且叫做update(),

一般通知者有三个方法,add(),delete(),notify(),这三个方法称为增加,减少和通知。

过程就是, 通知者 这个类里面有一个 观察者角色类 的列表,改模式主要的过程就是运行观察者类列表中所有观察者类的update()的方法。也就是说当调用通知者类的notify() 时,会运行已经加载在观察者角色类的列表的所有对象的update()方法。


观察者接口

public interface Observer {
	public void update();
}

具体观察者
public class ConcreteObserver implements Observer {

	@Override
	public void update() {
		// TODO Auto-generated method stub
		System.out.println("let have behaviour");
	}

}

通知者接口

public interface Subject {
	public void addObserver(Observer observer);
	public void deleteObserver(Observer observer);
	public void notifyObserver();
}

具体通知者

public class ConcreteSubject implements Subject {

	ArrayList<Observer> list=new ArrayList<Observer>();
	@Override
	public void addObserver(Observer observer) {
		// TODO Auto-generated method stub
		list.add(observer);
	}

	@Override
	public void deleteObserver(Observer observer) {
		// TODO Auto-generated method stub
		list.remove(observer);
	}

	@Override
	public void notifyObserver() {
		// TODO Auto-generated method stub
		for (Observer l : list) {
			l.update();
		}
	}

}

测试类

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Subject subject=new ConcreteSubject();
		Observer observer1=new ConcreteObserver();
		Observer observer2=new ConcreteObserver();
		subject.addObserver(observer1);
		subject.addObserver(observer2);
		subject.notifyObserver();
	}

}

运行的结果是

let have behaviour
let have behaviour



该模式说到底就是对一个list对象进行封装,封装后的类抽象为通知者类,list列表中的对象为观察者类,通知者类提供一个增加和一个删除list列表成员的方法,还有一个运行所有list列表中所有成员都共有的方法的方法。

然后将这通知者三个共有的方法抽象出来作为通知者的接口,将list列表中的成员(观察者)的要被操作的方法(update方法)抽象出来做来观察者的接口。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值