观察者模式

定义
当触发某些事件执行的时候,通知其他对象执行相关操作

优点
建立了一套触发机制

缺点
浪费时间
容易死循环

使用场景
项目初始化

歧义
mq是异步的
观察者模式是同步的

案例

import java.util.ArrayList;
import java.util.List;

/**
 *
 */
public class Clock {
    /**
     * 建立一对多的关系
     */
    private List<AbstractAction> list = new ArrayList<AbstractAction>();

    /**
     * 通知的对象有哪些
     * @param action
     */
    public void add(AbstractAction action){
        list.add(action);
    }

    /**
     * 时间到了通知各个对象
     */
    public void notice(){
        for (AbstractAction action : list) {
            action.action();
        }
    }

}
/**
 * 各个角色到了12点都要做个动作
 */
public abstract class AbstractAction {
    public abstract void action();
}


public class Teacher extends AbstractAction{
    @Override
    public void action() {
        System.out.println("老师下课了");
    }
}


public class Student extends AbstractAction{
    @Override
    public void action() {
        System.out.println("学生吃饭");
    }
}
public class Aunt extends  AbstractAction {
    @Override
    public void action() {
        System.out.println("阿姨卖饭");
    }
}
public class ObserverTest {
    public static void main(String[] args) {
        Clock clock = new Clock();

        Teacher teacher = new Teacher();
        Student student = new Student();
        Aunt aunt = new Aunt();

        clock.add(teacher);
        clock.add(student);
        clock.add(aunt);

        clock.notice();
    }


}

spring案例
ApplicationContext事件机制是观察者设计模式的实现,通过ApplicatonContext类和ApplicationListener接口,可以实现ApplicationContext事件处理

当容器中有ApplicationListener实现类时,每当ApplicationContext发布ApplicaitonEvent时,ApplicationListener的实现类将被自动触发

其中spring有一些内置事件,当完成魔种操作时会触发某些事件动作,比如监听ContextRefreshedEvent事件,当所有的bean都初始化完成并被成功装载后会触发该事件,实现ApplicationListener接口可以接收到监听动作

public class ApplicationLister implements ApplicationListener {
    public void onApplicationEvent(ApplicationEvent applicationEvent) {
        System.out.println("spring容器初始化完成,你可以初始化你自己的数据啦");
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
			http://www.springframework.org/schema/beans/spring-beans.xsd">


    <bean id="applicationLister" class="SpringObserver.ApplicationLister"></bean>

</beans>
public class SpringObserverTest {

    public static void main(String[] args) {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("SpringObserverApplicationContext.xml");

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值