JAVA观察者模式demo【设计模式系列】

有时候我们可能触发一个事件后,需要通知多个目标,这些目标有自己的处理逻辑,一个比较好理解的例子:我们的游戏角色四周都是小怪,我们往前走了一步,可能进入了一些小怪的攻击范围,这时候就需要通知四周小怪进行攻击行为,小怪们的攻击方式有不同,而没有进入攻击范围的小怪则无动于衷,就可以使用观察者模式。上代码~

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.查看执行结果

以上是我对观察者模式的理解,有不对的地方,欢迎留意指导!

相关推荐
听风吟丶7 分钟前
Java 9+ 模块化系统(Jigsaw)实战:从 Jar 地狱到模块解耦的架构升级
java·架构·jar
昂子的博客9 分钟前
Redis缓存 更新策略 双写一致 缓存穿透 击穿 雪崩 解决方案... 一篇文章带你学透
java·数据库·redis·后端·spring·缓存
百***688210 分钟前
SpringBoot中Get请求和POST请求接收参数详解
java·spring boot·spring
百***416624 分钟前
Java MySQL 连接
java·mysql·adb
Jayden29 分钟前
synchronized全解析:从锁升级到性能优化,彻底掌握Java内置锁
java·synchronized·synchronized面试·synchronized扫盲
任子菲阳1 小时前
学Java第四十五天——斗地主小游戏创作
java·开发语言·windows
czhc11400756631 小时前
Java1112 基类 c#vscode使用 程序结构
android·java·数据库
嫂子的姐夫1 小时前
23-MD5+DES+Webpack:考试宝
java·爬虫·python·webpack·node.js·逆向
缪懿1 小时前
JavaEE:多线程基础,多线程的创建和用法
java·开发语言·学习·java-ee
Chan161 小时前
Java 集合面试核心:ArrayList/LinkedList 底层数据结构,HashMap扩容机制详解
java·数据结构·spring boot·面试·intellij-idea