设计模式之-观察者(Observer)模式
2017-02-16 13:55
417 查看
低耦合抽象化通过建立依赖关系来完成订阅。
观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式、模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。
我们可以把他看做简单的事件驱动实现方式
创建订阅接口,规范add remove 及 notice
我们来实现这个订阅管理器
规范订阅者接口
我有3个订阅者,人,猫,狗
看看我们的main
输出
是不是很有意思,很有事件驱动的感觉。
观察者模式(有时又被称为发布(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> b7ca 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汪、汪、汪
是不是很有意思,很有事件驱动的感觉。
相关文章推荐
- 设计模式之观察者模式(Observer Pattern)(一)
- Java设计模式之Observer(观察者)模式
- java设计模式学习系列之六:Observer, 观察者模式---小例
- 设计模式笔记--行为型模式之七Observer--观察者
- 设计模式笔记 18. Observer 观察者模式(行为型模式)
- IssueVision 学习笔记(三)-----设计模式之OBSERVER(观察者)模式
- 设计模式学习2——观察者模式(Observer)
- 我读设计模式之观察者模式(Observer Pattern)
- 设计模式之观察者(Observer)模式与其C++通用实现(上)
- 设计模式理解 - 伟大的【Observer 观察者模式】
- C#设计模式-观察者observer模式实现
- .NET实用设计模式:观察者模式(Observer)
- 设计模式与泡mm的关系之Observer观察者模式及再思考
- 设计模式之Observer(观察者)
- 设计模式之观察者模式(Observer Pattern)(二)
- 乐在其中设计模式(C#) - 观察者模式(Observer Pattern)
- 乐在其中设计模式(C#) - 观察者模式(Observer Pattern)
- 设计模式之观察者Observer
- 观察者设计模式Observer
- 设计模式之Observer观察者模式