(3.2)观察者模式应用之微信订阅号

转载:https://www.cnblogs.com/zishengY/p/8970961.html

如上图所示,微信订阅号就是我们的主题,用户就是观察者。他们在这个过程中扮演的角色及作用分别是:

  1. 订阅号就是主题,业务就是推送消息
  2. 观察者想要接受推送消息,只需要订阅该主题即可
  3. 当不再需要消息推送时,取消订阅号关注即可
  4. 只要订阅号还在,观察者可以一直去进行关注

 接下来让我们通过一段示例,三位同事zhangsai、liyong、liujing订阅人民日报订阅号为例来介绍观察者模式(Obsever),代码如下:

//1、人民日报接口
   public interface PeoplesDaily
   {
       //添加订阅者
       void RegisterObserver(Observer observer);
       //取消订阅
       void RemoveObserver(Observer observer);
       //发送人民日报
       void notifyObservers();
   }
 
   //2、订阅者接口
   public interface Observer
   {
       //有新的人民日报了就会被执行通知
       void update();
   }
 
   //3、人民日报
   public class PeopleNewsPaper implements PeoplesDaily
   {
       private List<Observer> subList = new List<Observer>();
       public void RegisterObserver(Observer observer)
       {
           subList.Add(observer);
       }
 
       public void RemoveObserver(Observer observer)
       {
           if (subList.IndexOf(observer) >= 0)
           {
               subList.Remove(observer);
           }
       }
 
       //推送人民日报消息了~~
       public void notifyObservers()
       {
           for (Observer sub : subList)
           {
               sub.update();
           }
       }      
   }
 
  //4、订阅者
   public class subHuman implements Observer
   {
       //订阅者的名字
       private string name;
 
       public subHuman(string f_name)
       {
           name = f_name;
       }
       //通知订阅者有新人民日报推送消息了
       public void update()
       {
           system.out.println(p_name + "!! 有新的人民日报消息了,请查收!");
       }
        
   }

   //5、测试开始订阅,和调用了
  public static void Main(string[] args)
        {
            PeopleNewsPaper paper = new PeopleNewsPaper();
            subHuman zhsangsai = new subHuman("张赛");
            subHuman liyong = new subHuman("李勇");
            subHuman liujin = new subHuman("刘晶");
            //张赛订阅人民日报
            paper.RegisterObserver(zhsangsai);
            //李勇订阅人民日报
            paper.RegisterObserver(liyong);
            //刘晶订阅人民日报
            paper.RegisterObserver(liujin);
            //有新人民日报推送消息了
            paper.notifyObservers();
            system.out.println("---------------发完人民日报了------------------");
 
            //张赛不想订了,取消人民日报
            paper.RemoveObserver(zhsangsai);
            //又有新人民日报了  就没有张赛的人民日报 了
            paper.notifyObservers();
        }

 

posted @ 2019-03-18 11:52  测试开发分享站  阅读(114)  评论(0编辑  收藏  举报