这篇文章将为大家详细讲解有关使用Java设计模式中的观察者模式如何开发微信公众号,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
用Java设计模式中的观察者模式开发微信公众号的例子
观察者(观察者)模式又名发布-订阅(发布/订阅)模式.GOF给观察者模式如下定义:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
在这里先讲一下面向对象设计的一个重要原则,单一职责原则。因此系统的每个对象应该将重点放在问题域中的离散抽象上。因此理想的情况下,一个对象只做一件事情。这样在开发中也就带来了诸多的好处:提供了重用性和维护性,也是进行重构的良好的基础。
因此几乎所有的设计模式都是基于这个基本的设计原则来的。观察者模式的起源我觉得应该是在GUI和业务数据的处理上,因为现在绝大多数讲解观察者模式的例子都是这一题材。但是观察者模式的应用决不仅限于此一方面。
好了,对于定义的理解总是需要实例来解析的,如今的微信服务号相当火啊,下面就以微信服务号为背景,给大家介绍观察者模式。
看一张图:
其中每个使用者都有上图中的3条线,为了使图片清晰省略了。
如上图所示,服务号就是我们的主题,使用者就是观察者。现在我们明确下功能:
1,服务号就是主题,业务就是推送消息
2,观察者只需要订阅主题,只要有新的消息就会送来
3,当不想要此主题消息时,取消订阅
4,只要服务号还在,就会一直有人订阅
好了,现在我们来看看观察者模式的类图:
接下来就是代码时间了,我们模拟一个微信3 d彩票服务号,和一些订阅者。
首先开始写我们的主题接口,和观察者接口:
package com.zhy.pattern.observer;, ,/* *, ,*主题接口,所有的主题必须实现此接口, *大敌; ,* @author zhy *大敌; ,*/public interface  Subject {,/* *,才能 ,,*,注册一个观察着, ,,*, ,,*,@param observer ,,*/, public 才能;void  registerObserver (Observer 观察者),, ,/* *,才能 ,,*,移除一个观察者, ,,*, ,,*,@param observer ,,*/, public 才能;void  removeObserver (Observer 观察者),, ,/* *,才能 ,,*,通知所有的观察着, ,,*/, public 才能;void  notifyObservers (),, , }, package com.zhy.pattern.observer, ,/* *, ,* @author zhy 所有的观察者需要实现此接口, ,*/public interface  Observer {, public 才能;void 更新(String 味精),, , }
接下来3 d服务号的实现类:
package com.zhy.pattern.observer;, , import java.util.ArrayList, import 并不知道, , public class  ObjectFor3D implements  Subject {, private 才能;List< Observer>, observers =, new ArrayList(),,/* *,才能 ,,*,3 d彩票的号码, ,,*/, private 才能String 味精, , @Override 才能; public 才能;void  registerObserver (Observer 观察者), ,{大敌; ,,,observers.add(观察者);, ,,}, , @Override 才能; public 才能;void  removeObserver (Observer 观察者), ,{大敌; ,,,int index =, observers.indexOf(观察者);, ,,,if (index 祝辞=,0), ,,,{, ,,,,,observers.remove(指数),, ,,,}, ,,}, , @Override 才能; public 才能;void  notifyObservers (), ,{大敌; ,,,for (Observer Observer :观察员), ,,,{, ,,,,,observer.update(味精),, ,,,}, ,,}, ,/* *,才能 ,,*,主题更新消息, ,,*, ,,*,@param msg ,,*/, public 才能;void  setMsg (String 味精), ,{大敌; ,,,this.msg =,味精,, ,,,, ,,,notifyObservers (),, ,,}, , } 使用Java设计模式中的观察者模式如何开发微信公众号