Java用观察者模式重构复杂的业务代码
来源:互联网 发布:中国汉字听写大会 知乎 编辑:程序博客网 时间:2024/06/13 15:03
1. 定义一个统一的回调接口
public interface CallerInter { void call(Param param);}
public interface ObserverInter{ /** * 增加观察者 * * @param callInter */ void addObserver(CallerInter callInter); /** * 删除观察者 * * @param lemmaWriteBackOpObserver */ void delObserver(CallerInter callInter); /** * 通知观察者 * * @param lemmaRecord */ void notifyAllObserver(Param param);}
3. 定义观察者实现类
import org.springframework.beans.factory.InitializingBean;import org.springframework.stereotype.Service;import java.util.List;import java.util.concurrent.CopyOnWriteArrayList;/** * Created by denglinjie on 2016/8/19. */@Servicepublic class ObserverImpl implements ObserverInter, InitializingBean { //要通知的对象列表 private List<CallerInter> callerInterList; public void addObserver(CallerInter callInter) { callerInterList.add(callInter); } public void delObserver(CallerInter callInter) { callerInterList.remove(callInter); } public void notifyAllObserver(Param param) { for(CallerInter callerInter : callerInterList) { callerInter.call(param); } } public void afterPropertiesSet() throws Exception { callerInterList = new CopyOnWriteArrayList<CallerInter>(); //这里用一个线程安全的list,因为可能多线程同时操作它 } /** * 对外提供一个接口,当这个接口被调用的时候,可以通知所有注册进来的对象的特定call接口 */ public void operateService() { //构造参数 Param param = new Param(); notifyAllObserver(param); }}
4. 定义两个要被观察的对象,需要把自己注册到观察者列表中,即上述ObserImpl的callInterList集合中
import com.sogou.study.observer.CallerInter;import com.sogou.study.observer.ObserverInter;import com.sogou.study.observer.Param;import org.springframework.beans.factory.InitializingBean;import org.springframework.beans.factory.annotation.Autowired;/** * Created by denglinjie on 2016/8/19. */public class CallImplFirst implements CallerInter, InitializingBean { @Autowired private ObserverInter observerInter; public void call(Param param) { //do something } public void afterPropertiesSet() throws Exception { observerInter.addObserver(this); }}
import com.sogou.study.observer.CallerInter;import com.sogou.study.observer.ObserverInter;import com.sogou.study.observer.Param;import org.springframework.beans.factory.InitializingBean;import org.springframework.beans.factory.annotation.Autowired;/** * Created by denglinjie on 2016/8/19. */public class CallImplSecond implements CallerInter, InitializingBean { @Autowired private ObserverInter observerInter; public void call(Param param) { //do something } public void afterPropertiesSet() throws Exception { observerInter.addObserver(this); }}
5. 这样其他业务调用ObserverImpl的operateService方法时,就可以通知所有的注册的对象做一些事情。当一个业务逻辑很复杂要做很多事情的时候,如果把代码写在一起会显得很拥挤,不利于维护,这时,可以通过这种观察者模式,将不同的业务处理区分开。
0 0
- Java用观察者模式重构复杂的业务代码
- 使用工厂模式和策略模式重构复杂业务逻辑
- 用java代码实现观察者模式
- 复杂业务的简单接口--外观模式
- java的观察者模式
- java的观察者模式
- Java代码重构的几种模式
- Java代码重构的几种模式
- 利用观察者模式处理业务单元的变化
- 复杂业务状态的处理:从状态模式到 FSM
- Java 观察者模式的浅析
- Java 观察者模式的浅析
- Java 观察者模式的浅析
- Java 观察者模式的浅析
- Java 观察者模式的浅析
- Java 观察者模式的浅析
- Java 观察者模式的浅析
- Java 观察者模式的浅析
- android 根据设置的日期获取星期几
- 除去ScrollVIew拉到尽头时再拉的阴影效果和个别机型的阻尼效果
- dubbo+zookeeper集群
- linux和qt 字符串和数字转换篇
- hdu2087 剪花布条 KMP
- Java用观察者模式重构复杂的业务代码
- 【NOIP2016提高A组模拟8.19】(雅礼联考day2)公约数
- 字符编码
- 数组去重的四种方法
- IPPBX-性能测试
- zookeeper安装过程
- Android Studio 使用 插件 Butterknife
- 驱动学习第一讲附(read,write的实现)
- 求1+2+3+...+n