星矢:动画片《圣斗士星矢》的男猪脚,超级小强,怎么打也打不死。

  雅典娜:动画片《圣斗士星矢》的女猪脚,自称女神,手下有88个男人为他卖命。

  状态模式:为了方便的控制状态的变化,避免一堆IF/ELSE,以及状态规则改变的时避免代码改动的混乱。

  观察者模式:一个被观察者一动,多个观察者跟着动,经常用于界面UI。

  话说星矢和很强的某斗士甲对打,雅典娜在一边看,星矢总是挨揍,每次挨揍完之后星矢的状态总是会发生一些变化:

  正常--挨打--瀕死--挨打--小宇宙爆发--挨打--瀕死--挨打--女神护体--挨打(星矢无敌了,打也没用,战斗结束)--正常

  以上状态转变用状态模式来表现,一个Saiya类代表星矢,一个SaiyaState代表他的状态,SaiyaState下面有多个子类,分别代表星矢的多种状态,如正常NORMAL、瀕死DYING、小宇宙爆发UNIVERSE、女神护体GODDESS,即把状态抽象成对象,在每种状态里面实现被打的时候所需要更改的状态,这样就避免了每次被打都要进行一次IF/ELSE的判断。

  Java代码 

public class Saiya extends Observable {
  //定义星矢的四种状态
  public final SaiyaState NORMAL = new NormalState(this);
  public final SaiyaState DYING = new DyingState(this);
  public final SaiyaState GODDESS = new GoddessState(this);
  public final SaiyaState UNIVERSE = new UniverseState(this);
  private SaiyaState state=NORMAL;
  private SaiyaState laststate=null;
  public void hit(){
  //调用当前状态的被打方法 反过来改变自己的状态
  state.hit();
  }
  public String status(){
  //当前状态名
  return state.status();
  }
  protected void setState(SaiyaState state){
  laststate=this.state;
  this.state=state;
  //观察者模式
  setChanged();
  notifyObservers("星矢状态变化");
  }
  public String getlastStatus(){
  return laststate.status();
  }
  public class Saiya extends Observable {
  //定义星矢的四种状态
  public final SaiyaState NORMAL = new NormalState(this);
  public final SaiyaState DYING = new DyingState(this);
  public final SaiyaState GODDESS = new GoddessState(this);
  public final SaiyaState UNIVERSE = new UniverseState(this);
  private SaiyaState state=NORMAL;
  private SaiyaState laststate=null;
  public void hit(){
  //调用当前状态的被打方法 反过来改变自己的状态
  state.hit();
  }
  public String status(){
  //当前状态名
  return state.status();
  }
  protected void setState(SaiyaState state){
  laststate=this.state;
  this.state=state;
  //观察者模式
  setChanged();
  notifyObservers("星矢状态变化");
  }
  public String getlastStatus(){
  return laststate.status();
  }

转载于:https://www.cnblogs.com/qq1287527359/p/3326323.html

【圣斗士星矢的状态模式和观察者模式】相关推荐

  1. 圣斗士星矢的状态模式和观察者模式

    为什么80%的码农都做不了架构师?>>>    星矢:动画片<圣斗士星矢>的男猪脚,超级小强,怎么打也打不死. 雅典娜:动画片<圣斗士星矢>的女猪脚,自称女神 ...

  2. 主题:圣斗士星矢的状态模式和观察者模式

    星矢:动画片<圣斗士星矢>的男猪脚,超级小强,怎么打也打不死. 雅典娜:动画片<圣斗士星矢>的女猪脚,自称女神,手下有88个男人为他卖命. 状态模式:为了方便的控制状态的变化, ...

  3. 8-设计模式之行为型模式二(状态模式、观察者模式、中介者模式)

    设计模式之行为型模式二(状态模式.观察者模式.中介者模式) 6.5 状态模式 6.5.1 概述 6.5.2 结构 6.5.3 案例实现 6.5.4 优缺点 6.5.5 使用场景 6.6 观察者模式 6 ...

  4. 设计模式——状态模式、观察者模式(行为型模式)

    状态模式包含以下主要角色. 环境(Context)角色:也称为上下文,它定义了客户程序需要的接口,维护一个当前状态,并将与状态相关的操作委托给当前状态对象来处理. 抽象状态(State)角色:定义一个 ...

  5. 设计模式、原则、饿汉式单例模式、抽象工厂、代理模式、观察者模式、模板方法模式使用场景

    设计模式 ​ 对各种面向对象方法的一种总结.前辈们遇到了好多设计问题,然后利用面向对象解决了.然后他们把解决方案汇总起来,形成了20多种设计模式.它可以有效的帮助我们利用面向对象,来提高代码的复用性. ...

  6. 游戏开发设计模式之状态模式 有限状态机 c#委托事件(unity3d 示例实现)

    命令模式:游戏开发设计模式之命令模式(unity3d 示例实现) 对象池模式:游戏开发设计模式之对象池模式(unity3d 示例实现) 原型模式:游戏开发设计模式之原型模式 & unity3d ...

  7. 策略模式、观察者模式、状态模式原理及实例

    策略模式 基本介绍 策略模式(Strategy Pattern)中,定义算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户 这算法体现了几个设计原则. 第一 把变化的 ...

  8. 图解Java设计模式学习笔记——行为型模式(模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式)

    一.模板方法模式(模板模式)--钩子方法 1.需求-豆浆制作问题 编写制作豆浆的程序,说明如下: 制作豆浆的流程选材-->添加配料-->浸泡-->放到豆浆机打碎. 通过添加不同的配料 ...

  9. 设计模式第十二次作业——观察者模式、状态模式

    组件协作模式:现代软件专业分工之后的第一个结果是"框架与应用程序的划分","组件协作"模式通过晚期绑定,来实现框架与 应用程序之间的松耦合,是二者之间协作时常用 ...

最新文章

  1. java抓取网页标题内容_[Java教程]java 网页页面抓取标题和正文
  2. 我所理解的原型原型链
  3. 使用Hash直接登录Windows
  4. php获取屏幕的宽高,JS获取屏幕宽高
  5. 读书笔记 - 《吉卜力的伙伴们》
  6. 【pmcaff】2014互联网公司薪资排行榜
  7. linux C++ 多线程编程
  8. java接口允许ajax访问_服务允许AJAX请求,允许跨域请求
  9. 键盘与鼠标器是微型计算机上最常用的,2016年职称计算机考试WindowsXP考前预测试题5...
  10. 迷宫的最短路径(bfs)
  11. 解决Hadoop时no namenode to stop异常或则 是 jps中没有namenode
  12. Ubuntu pip AttributeError: 'module' object has no attribute '_main'
  13. jsZip上传,jsZip压缩文件并上传到服务器
  14. IT项目管理追踪表格
  15. Android 开源项目分类汇总(下)
  16. ios7新特性--4
  17. 基于Verilog HDL与虚拟实验平台的【计算机组成】与CPU实验第三章:三态门和多路器
  18. 色散共焦传感器如何进行同步信号输出?
  19. VoLTE常用12大知识点
  20. ConcurrentHashMap1.7深度解析

热门文章

  1. python复习加总结
  2. 股价创近11个月新高,欢聚集团靠短视频跟直播为市值撑腰?
  3. 硬件视角计算机是如何工作的
  4. 关于WebLogic环境搭建和漏洞复现
  5. python统计词频
  6. 入职阿里巴巴数据分析师——我的10个关键转折点
  7. windows 下制造内存短缺的狠招
  8. 青岛大学超级计算机,湖南商学院成功主办2019年国家社科基金申报经验交流会...
  9. html关于圣诞节主题的网页,分享一个2014年圣诞节倒计时页面特效
  10. Unknown custom element did you register the component correctly