当前位置: 移动技术网 > IT编程>软件设计>设计模式 > 观察者设计模式

观察者设计模式

2019年05月01日  | 移动技术网IT编程  | 我要评论

在网上找了很久没看见有讲的很清楚的,我自己花了一点时间终于弄懂了,现在想用最通俗易懂的方法将观察者设计模式讲明白

观察者设计模式类似于发布订阅模式,所以我准备以订阅用户定义公众号来举例说明

首先创建公众号接口类

 1 package 观察者模式;
 2 //公众号接口
 3 interface wechatinterface {
 4     //添加用户
 5     void adduser(user user);
 6     //删除用户(这里相当于将用户放入黑名单)
 7     void deleteuser(user user);
 8     //当公众号要推送新的内容时,调用这个方法
 9     void notifyuser();
10 }

其次创建订阅接口类

1 package 观察者模式;
2 //订阅接口
3 interface oder {
4     //当公众号更新内容的时候,会将内容传入该方法,每个微信公众号的订阅者都要实现该方法
5     public void update(string message);
6 }

接下来创建公众号类

 1 package 观察者模式;
 2 import java.util.arraylist;
 3 import java.util.list;
 4 
 5 //公众号类
 6 public class wechatofficialaccount implements wechatinterface{
 7 
 8     //微信公众号维护内部维护了很多订阅用户
 9     private list<user> userlist = new arraylist<>();
10 
11     //公众号的名字
12     private string wechatname;
13 
14     //要推送的内容
15     private string message;
16 
17     public wechatofficialaccount(string wechatname) {
18         this.wechatname = wechatname;
19     }
20 
21     public void setmessage(string message) {
22         this.message = message;
23         this.notifyuser();
24     }
25 
26     @override
27     public void adduser(user user) {
28         userlist.add(user);
29     }
30 
31     @override
32     public void deleteuser(user user) {
33         if (userlist.indexof(user)>=0){
34             userlist.remove(user);
35         }
36     }
37 
38     @override
39     public void notifyuser() {
40         message=this.wechatname+this.message;
41         for (user user:userlist) {
42             user.update(message);
43         }
44     }
45 }

接下来创建用户类

 1 package 观察者模式;
 2 //公众号的订阅用户
 3 public class user implements oder{
 4 
 5     //用户关注的公众号
 6     private wechatofficialaccount wechatofficialaccount;
 7 
 8     //用户名
 9     private string username;
10 
11     public user(wechatofficialaccount wechatofficialaccount, string username) {
12         this.wechatofficialaccount = wechatofficialaccount;
13         this.username = username;
14         wechatofficialaccount.adduser(this);//每创建一个用户,都叫他关注这个公众号
15     }
16 
17     @override
18     public void update(string message) {
19         system.out.println(username+"收到消息"+message);
20     }
21 }

接下来创建主方法进行测试

 1 package 观察者模式;
 2 //测试观察者模式的主类
 3 public class main {
 4     public static void main(string[] args) {
 5         wechatofficialaccount wechatofficialaccount = new wechatofficialaccount("罗辑思维");
 6         user user1 = new user(wechatofficialaccount,"马芸");
 7         user user2 = new user(wechatofficialaccount,"马化疼");
 8         user user3 = new user(wechatofficialaccount,"李艳红");
 9 
10         wechatofficialaccount.setmessage("今日推送的内容为:时间的朋友");
11 
12         wechatofficialaccount.deleteuser(user2);//马化疼因为怼罗辑思维,被罗辑思维放黑名单了
13 
14         wechatofficialaccount.setmessage("今日推送的内容为:终身学习");
15 
16     }
17 }

以下是输出结果

1 马芸收到消息罗辑思维今日推送的内容为:时间的朋友
2 马化疼收到消息罗辑思维今日推送的内容为:时间的朋友
3 李艳红收到消息罗辑思维今日推送的内容为:时间的朋友
4 马芸收到消息罗辑思维今日推送的内容为:终身学习
5 李艳红收到消息罗辑思维今日推送的内容为:终身学习
6 
7 process finished with exit code 0

 

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网