使用Java设计模式中的观察者模式如何开发微信公众号

  介绍

这篇文章将为大家详细讲解有关使用Java设计模式中的观察者模式如何开发微信公众号,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

用Java设计模式中的观察者模式开发微信公众号的例子

观察者(观察者)模式又名发布-订阅(发布/订阅)模式.GOF给观察者模式如下定义:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
在这里先讲一下面向对象设计的一个重要原则,单一职责原则。因此系统的每个对象应该将重点放在问题域中的离散抽象上。因此理想的情况下,一个对象只做一件事情。这样在开发中也就带来了诸多的好处:提供了重用性和维护性,也是进行重构的良好的基础。
因此几乎所有的设计模式都是基于这个基本的设计原则来的。观察者模式的起源我觉得应该是在GUI和业务数据的处理上,因为现在绝大多数讲解观察者模式的例子都是这一题材。但是观察者模式的应用决不仅限于此一方面。


好了,对于定义的理解总是需要实例来解析的,如今的微信服务号相当火啊,下面就以微信服务号为背景,给大家介绍观察者模式。
看一张图:

使用Java设计模式中的观察者模式如何开发微信公众号

其中每个使用者都有上图中的3条线,为了使图片清晰省略了。
如上图所示,服务号就是我们的主题,使用者就是观察者。现在我们明确下功能:
1,服务号就是主题,业务就是推送消息
2,观察者只需要订阅主题,只要有新的消息就会送来
3,当不想要此主题消息时,取消订阅
4,只要服务号还在,就会一直有人订阅
好了,现在我们来看看观察者模式的类图:

使用Java设计模式中的观察者模式如何开发微信公众号

接下来就是代码时间了,我们模拟一个微信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设计模式中的观察者模式如何开发微信公众号