当前位置: 首页 > news >正文

自学网页设计的网站百度游戏官网

自学网页设计的网站,百度游戏官网,域名备案企业网站内容,全屋定制app量尺寸的软件前言 作者在准备秋招中#xff0c;学习设计模式#xff0c;做点小笔记#xff0c;用宝可梦为场景举例#xff0c;有错误欢迎指出。 观察者模式 观察者模式定义了一种一对多的依赖关系#xff0c;一个对象的状态改变#xff0c;其他所有依赖者都会接收相应的通知。 所…前言 作者在准备秋招中学习设计模式做点小笔记用宝可梦为场景举例有错误欢迎指出。 观察者模式 观察者模式定义了一种一对多的依赖关系一个对象的状态改变其他所有依赖者都会接收相应的通知。 所以 何时使用: 一个对象的状态改变其他所有依赖对象都要知道意图: 定义一种一对多的依赖关系一个对象状态改变所有其他对象都要得到通知主要解决: 在降低耦合的基础上实现一对多的协作 观察者模式中存在四种角色 主题 (Subject): 被观察者它要有能通知的状态要维护一个观察者列表。观望者(Observer): 观察者接收主题的通知。需要有一个更新方法接收到主题状态改变后调用。具体主题(Concrete Subject): 主题的实现类。具体观察者(Concrete Observer): 观察者的实现类实现更新方法。 是不是觉得四种角色突然被引入十分抽象别急看看下面的故事。 1. 情景模拟 现在宝可梦研究所业务如日中天人人都想开个研究所狠狠地赚一笔。 但是想要开宝可梦研究所那肯定得先把宝可梦研究透啊怎么研究呢先抓回来 所以新开的小木博士研究所就打算把关都地区和城都地区的宝可梦都给抓来再说。 小木博士决定雇点训练家来抓宝可梦于是大量的训练家都来兼职。 作为亲属的小智和小茂也来兼职帮个忙小智负责关都地区小茂负责成都地区。 为了控制成本每种宝可梦抓一只就够了所以每当一个训练家抓到一个精灵就要通知一下其他同行 某个地区已经抓住了多少个精灵啦总共还剩多少个以免大家抓到重复。 (当然因为小智和小茂是家属所以开点小灶只通知了他俩。) 于是可以引入了观察者模式的各个对象 主题: 研究所的业务观察者: 训练家具体主题: 抓宝可梦的任务具体观察者: 负责不同地区的训练家 2. 代码 先随便定义一个主题的接口 public interface SubjectLab { }定义观察者的接口即训练家其中观察者依赖他要观察的Subject类 /*** 训练家*/ public abstract class ObserverTrainer {protected SubjectPokedex subject;public abstract void update(); }小智和小茂分别负责各自地区 public class Satoshi extends ObserverTrainer{// 该对象观察这个Subject// 同时Subject也绑定这个对象会发送通知public Satoshi(SubjectPokedex pokedex) {this.subject pokedex;this.subject.employ(this);}Overridepublic void update() {System.out.println(I am Satoshi! I got the message:);this.subject.getDexState(Kanto);} }public class Shigeru extends ObserverTrainer{public Shigeru(SubjectPokedex subject) {this.subject subject;this.subject.employ(this);}Overridepublic void update() {System.out.println(I am Shigeru! I got the message:);this.subject.getDexState(Johto);} }最后是这次抓宝可梦任务的实现类 public class SubjectPokedex implements SubjectLab{private ListObserverTrainer trainers new ArrayList();private HashMapString, Integer pokedex new HashMap();private Integer num;/*** 初始化假设各个地区已经发现了很多宝可梦* 还有value个宝可梦没有被抓到研究所研究* num统计总数*/public SubjectPokedex() {pokedex.put(Kanto, 155);pokedex.put(Johto, 155);num 310;}/*** 打印某地区剩下的宝可梦* param region 地区*/public void getDexState(String region){System.out.println(There are still pokedex.getOrDefault(region, 0) Pokemons in region that havent been captured.);System.out.println(There are a total of num Pokemon that have not been captured yet.\n);}/*** 抓获了num个宝可梦*/public void catchPokemon(String region, Integer num){this.pokedex.put(region, pokedex.get(region) - num);this.num - num;notifyAllTrainers();}/*** 任命愿意来帮助捕捉宝可梦的训练家们* param trainer 训练家*/public void employ(ObserverTrainer trainer){trainers.add(trainer);}/*** 通知所有参与的训练家*/public void notifyAllTrainers(){for (ObserverTrainer trainer : trainers) {trainer.update();}} } 测试类 public class ObserverDemo {public static void main(String[] args) {// Subject对象SubjectPokedex subjectPokedex new SubjectPokedex();// 两个观察者接收Subject的通知new Satoshi(subjectPokedex);new Shigeru(subjectPokedex);// 通知关都地区抓住了30只subjectPokedex.catchPokemon(Kanto, 30);// 通知城都地区抓住了90只subjectPokedex.catchPokemon(Johto, 90);} }I am Satoshi! I got the message: There are still 125 Pokemons in Kanto that havent been captured. There are a total of 280 Pokemon that have not been captured yet.I am Shigeru! I got the message: There are still 155 Pokemons in Johto that havent been captured. There are a total of 280 Pokemon that have not been captured yet.I am Satoshi! I got the message: There are still 125 Pokemons in Kanto that havent been captured. There are a total of 190 Pokemon that have not been captured yet.I am Shigeru! I got the message: There are still 65 Pokemons in Johto that havent been captured. There are a total of 190 Pokemon that have not been captured yet.3.应用 笔者水平有限暂时不知道Java哪个常用API用到了观察者模式。 不过可以根据这个思想大概猜测一种注册端口再监听的做法和这个差不多。 如果你的微博关注了某人TA发微博时会推送给你关注这个行为就相当于是你开始观察这个人(Subject). 或者Steam心愿单添加了某款游戏这游戏降价时也会推送给你推送给每个观察者(添加愿望单的玩家). 4.和发布-订阅模式的讨论 有了解过消息队列的聪明的训练家就会感觉这和发布-订阅模式很像啊 在查阅资料的过程中发现有些博主会把发布-订阅模式与观察者模式划等号其实细品的话还是有一些区别。 我认为最大的区别在于发布-订阅模式的主要目的是将发布者与订阅者解耦发布者将消息发送给中间代理然后代理分发消息给订阅者让订阅者和发布者之间无需互相关注。 而观察者模式强调的是观察者和被观察者之间的联系被观察者(Subject)甚至会负责维护一个观察者的抽象类的列表他们之间的联系是紧密的。 第二个区别发布-订阅模式的消息传递是通过中间代理而观察者模式是观察者与被观察者之间直接通信。 所以发布-订阅模式是不能跟观察者模式划等号的观察者模式是一种更为简单的设计理念而发布-订阅模式适用于更复杂的业务场景。
http://www.dnsts.com.cn/news/54457.html

相关文章:

  • 仿站小工具 wordpresswordpress 新浪博客
  • 个人网站做支付宝收款网站推广优化怎样
  • 怀化找什么人做网站重庆市建设工程施工安全管理网站
  • 网站建设的合同wordpress 增大内存
  • 河南网站建设公司|河南网站建设价格费用微信的网站建设
  • 移动网站开发做视频网站要准备哪些资料
  • 平价网站建设wordpress连接不上
  • 有ip怎么用自己的主机做网站网站设计公司多少钱
  • 教用vs2013做网站的书软文大全500篇
  • 隆尧网站虚拟体验网站
  • 中山建网站哪家好哪个网站美丽乡村做的比较好
  • 电子商务网站建设的一般过程一键生成论文的网站
  • 贵阳网站建设 赶集兰州网站运营
  • wordpress留言板插件长春百度seo
  • 网站建设信用卡取消网站怎样投放广告位
  • 怎么做网站移动端网站备案快速
  • 安县网站制作联想公司网站建设现状
  • 怎么做网站填内容wordpress 的分类目录
  • 石家庄网站优化招聘免费 网站源码
  • 盐城seo网站优化软件wordpress前台如何删除文章
  • 网站建设中html网页城乡住房建设厅网站
  • 网站建设培训教程网络游戏投诉平台
  • wordpress主机免费外贸网站优化价格
  • 设计类网站推荐及介绍海外云服务器推荐
  • 培训网站有哪些tomcat 网站开发
  • google 空间 网站环保网站建设说明书
  • 静态网站建设规划东莞做网站有哪些
  • 网站用心WordPress同步某个表
  • 毕设网站php自己做网站
  • 网站飘落怎么做做市场调研的网站