(3.2)观察者模式应用之微信订阅号
转载:https://www.cnblogs.com/zishengY/p/8970961.html
如上图所示,微信订阅号就是我们的主题,用户就是观察者。他们在这个过程中扮演的角色及作用分别是:
- 订阅号就是主题,业务就是推送消息
- 观察者想要接受推送消息,只需要订阅该主题即可
- 当不再需要消息推送时,取消订阅号关注即可
- 只要订阅号还在,观察者可以一直去进行关注
接下来让我们通过一段示例,三位同事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();
}