java设计模式--观察者模式
2019-08-16 09:37:26来源:博客园 阅读 ()
java设计模式--观察者模式
观察者模式:又称发布-订阅(Publish/Subscribe)模式。我们先看一个例子,现在直播行业越做越大,许多人都有关注自己喜欢的主播,人们订阅某一个主播,当该主播开播时,给订阅他的人发布提示说他开始直播了,这就是一个观察者模式的实例。
通知者类,提供了增加和删除,以及通知观察者对象的方法。
//网络主播类 public class NetworkAnchor { //定义一个观察者的集合 List<People> observers = new ArrayList<>(); //当有人订阅了该主播,便把这个对象加入集合 public void subscribe(People people){ if(people!=null && !observers.contains(people)){ observers.add(people); } } //取消订阅 public void cancel(People people){ observers.remove(people); } //主播开播时通知观察者 public void notifyPeople(){ for (People people: observers) { people.update(this); } } }
观察者接口,在得到通知者的通知时更新自己。
//网民类 public interface People { //定义一个更新方法,用于更新状态 void update(NetworkAnchor networkAnchor); }
具体的观察者对象。
//具体网民类A public class PeopleA implements People { @Override public void update(NetworkAnchor networkAnchor) { System.out.println(this.getClass().getSimpleName()+ "收到" + networkAnchor.getClass().getSimpleName() + "的消息"); } }
//具体网民类B public class PeopleB implements People { @Override public void update(NetworkAnchor networkAnchor) { System.out.println(this.getClass().getSimpleName()+ "收到" + networkAnchor.getClass().getSimpleName() + "的消息"); } }
测试方法,首先创建一个主播类实例,将观察者A,B添加进去,然后发布通知。
//测试类 public class Test { public static void main(String[] args) { NetworkAnchor networkAnchor = new NetworkAnchor(); networkAnchor.subscribe(new PeopleA()); networkAnchor.subscribe(new PeopleB()); networkAnchor.notifyPeople(); } }
测试结果:
PeopleA收到NetworkAnchor的消息
PeopleB收到NetworkAnchor的消息
总结:当一个对象的改变需要改变其他对象,并且被改变对象不知道其他被改变对象时,我们可以使用观察者模式。并且使用观察者模式分离了观察者与被观察者,降低耦合程度,除此之外,当有其他的网络主播时,我们可以定义一个通知者的接口(这里不再实现),使所有通知者实现这个接口即可。让耦合的双方依赖抽象,符合依赖倒转原则。
原文链接:https://www.cnblogs.com/yimengyizhen/p/11121229.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- Java--反射(框架设计的灵魂)案例 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash