有时候我们可能触发一个事件后,需要通知多个目标,这些目标有自己的处理逻辑,一个比较好理解的例子:我们的游戏角色四周都是小怪,我们往前走了一步,可能进入了一些小怪的攻击范围,这时候就需要通知四周小怪进行攻击行为,小怪们的攻击方式有不同,而没有进入攻击范围的小怪则无动于衷,就可以使用观察者模式。上代码~
1.创建一个观察者服务接口
public interface ObserveService {
void handle();
}
2.创建3个观察者,实现【ObserveService】接口
public class ObserveServiceImpl1 implements ObserveService{
@Override
public void handle() {
System.out.println("观察者处理逻辑1");
}
}
3.创建被观察者
public class ObserveFactory {
private List<ObserveService> observeServiceList = new ArrayList<>();
/**
* 添加观察者
* @param observeService
*/
public void addObserveService(ObserveService observeService)
{
observeServiceList.add(observeService);
}
/**
* 通知观察者
*/
public void notifyObserve() {
for (ObserveService observeService : observeServiceList) {
observeService.handle();
}
}
}
4.根据业务,把观察者添加进集合,再根据业务通知观察者们
@Test
public void observeTest() {
ObserveServiceImpl1 observeServiceImpl1 = new ObserveServiceImpl1();
ObserveServiceImpl2 observeServiceImpl2 = new ObserveServiceImpl2();
ObserveServiceImpl3 observeServiceImpl3 = new ObserveServiceImpl3();
//根据业务逻辑,把观察者添加到集合中
ObserveFactory observeFactory = new ObserveFactory();
observeFactory.addObserveService(observeServiceImpl1);
observeFactory.addObserveService(observeServiceImpl2);
observeFactory.addObserveService(observeServiceImpl3);
//根据业务逻辑,通知观察者们
observeFactory.notifyObserve();
}
5.查看执行结果
以上是我对观察者模式的理解,有不对的地方,欢迎留意指导!