观察者设计模式
程序员文章站
2022-04-14 18:41:40
在网上找了很久没看见有讲的很清楚的,我自己花了一点时间终于弄懂了,现在想用最通俗易懂的方法将观察者设计模式讲明白 观察者设计模式类似于发布订阅模式,所以我准备以订阅用户定义公众号来举例说明 首先创建公众号接口类 其次创建订阅接口类 接下来创建公众号类 接下来创建用户类 接下来创建主方法进行测试 以下 ......
在网上找了很久没看见有讲的很清楚的,我自己花了一点时间终于弄懂了,现在想用最通俗易懂的方法将观察者设计模式讲明白
观察者设计模式类似于发布订阅模式,所以我准备以订阅用户定义公众号来举例说明
首先创建公众号接口类
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
上一篇: Flask数据库
下一篇: 自己写一个Promise