设计模式之-观察者(Observer)模式
来源:互联网 发布:域名系统dns的作用是 编辑:程序博客网 时间:2024/05/16 11:36
低耦合抽象化通过建立依赖关系来完成订阅。
观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式、模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。
我们可以把他看做简单的事件驱动实现方式
创建订阅接口,规范add remove 及 notice
package Observer;/** * 订阅管理器接口 * * @author Allen * @date 2017年2月16日 * */public interface ISubscribe { /** * 添加订阅 * * @param subs * @author Allen * @date 2017年2月16日 */ public void addSubscribe(ISubscriber subr); /** * 删除订阅 * * @param subs * @author Allen * @date 2017年2月16日 */ public void removeSubscribe(ISubscriber subr); /** * * 通知订阅变化 * * @param content * @author Allen * @date 2017年2月16日 */ public void notice(String content);}
我们来实现这个订阅管理器
package Observer;import java.util.ArrayList;import java.util.List;/** * 订阅实现 * * @author Allen * @date 2017年2月16日 * */public class SubscribeImple implements ISubscribe { private List<ISubscriber> result = new ArrayList<ISubscriber>(); @Override public void addSubscribe(ISubscriber subr) { System.out.println(subr.getClass().getName()+"~~订阅了"); result.add(subr); } @Override public void removeSubscribe(ISubscriber subr) { result.remove(subr); } @Override public void notice(String content) { System.out.println("============所有订阅者听着============"); System.out.println(content); System.out.println("====================================="); for (ISubscriber temp : result) { temp.msg(content); } }}
规范订阅者接口
package Observer;/** * 订阅者 * * @author Allen * @date 2017年2月16日 * */public interface ISubscriber { /** * 新消息 */ public void msg(String content);}
我有3个订阅者,人,猫,狗
public class Cat implements ISubscriber { @Override public void msg(String content) { System.out.println(this.getClass().getName()+"喵呜~~~~~~~~~~~"); }}
package Observer;/** * * @author Allen * @date 2017年2月16日 * */public class Dog implements ISubscriber { @Override public void msg(String content) { System.out.println(this.getClass().getName()+"汪、汪、汪"); }}
package Observer;/** * * @author Allen * @date 2017年2月16日 * */public class Human implements ISubscriber { @Override public void msg(String content) { System.out.println(this.getClass().getName()+"知道了"); }}
看看我们的main
public static void main(String[] args) { //得到订阅管理器 ISubscribe subs = new SubscribeImple(); //人类猫咪狗狗全都订阅了 subs.addSubscribe(new Human()); subs.addSubscribe(new Cat()); subs.addSubscribe(new Dog()); ... ... //一段时间后管理器发送一条通知,给所有订阅者 subs.notice("这是一条通知,你们要各自履行义务"); }
输出
Observer.Human~~订阅了Observer.Cat~~订阅了Observer.Dog~~订阅了============所有订阅者听着============这是一条通知,你们要各自履行义务=====================================Observer.Human知道了Observer.Cat喵呜~~~~~~~~~~~Observer.Dog汪、汪、汪
是不是很有意思,很有事件驱动的感觉。
0 0
- 设计模式之Observer(观察者模式)
- 设计模式之Observer(观察者模式)
- 【设计模式】之观察者模式(Observer)
- 设计模式之--观察者模式(Observer)
- 设计模式之观察者(Observer)模式
- 设计模式之观察者(observer)模式
- 设计模式之观察者模式(Observer)
- 设计模式之-观察者模式(Observer)
- 设计模式之观察者模式(Observer)
- 设计模式之观察者模式(Observer)
- 设计模式之观察者模式(Observer)
- 设计模式之观察者(Observer)模式
- 设计模式之观察者模式(Observer)
- 设计模式之-观察者(Observer)模式
- 设计模式之Observer(观察者)模式
- 设计模式之观察者模式(Observer)
- 设计模式之Observer(观察者)
- 设计模式之Observer 观察者
- echars图表玫瑰饼图隐藏LableLine与内部区域显示百分比
- ReactNative之bundle文件瘦身(google-diff-match-patch)
- 747C Servers
- libstreaming推流到darwin关于rtspclient的改造问题
- Java开发者常犯的10个错误
- 设计模式之-观察者(Observer)模式
- 9、SQL Server:创建和使用临时表(转)
- 安卓使用getContentResolver直接获取相册图片
- 欢迎使用CSDN-markdown编辑器
- VS2013 单步调试中提示缺少stack.cpp?
- 夕拾算法进阶篇:25)平衡二叉树(AVL算法)
- Linux命令--网络命令
- Linux-Day3-安装软件
- Groovy字符串