【圣斗士星矢的状态模式和观察者模式】
星矢:动画片《圣斗士星矢》的男猪脚,超级小强,怎么打也打不死。
雅典娜:动画片《圣斗士星矢》的女猪脚,自称女神,手下有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
【圣斗士星矢的状态模式和观察者模式】相关推荐
- 圣斗士星矢的状态模式和观察者模式
为什么80%的码农都做不了架构师?>>> 星矢:动画片<圣斗士星矢>的男猪脚,超级小强,怎么打也打不死. 雅典娜:动画片<圣斗士星矢>的女猪脚,自称女神 ...
- 主题:圣斗士星矢的状态模式和观察者模式
星矢:动画片<圣斗士星矢>的男猪脚,超级小强,怎么打也打不死. 雅典娜:动画片<圣斗士星矢>的女猪脚,自称女神,手下有88个男人为他卖命. 状态模式:为了方便的控制状态的变化, ...
- 8-设计模式之行为型模式二(状态模式、观察者模式、中介者模式)
设计模式之行为型模式二(状态模式.观察者模式.中介者模式) 6.5 状态模式 6.5.1 概述 6.5.2 结构 6.5.3 案例实现 6.5.4 优缺点 6.5.5 使用场景 6.6 观察者模式 6 ...
- 设计模式——状态模式、观察者模式(行为型模式)
状态模式包含以下主要角色. 环境(Context)角色:也称为上下文,它定义了客户程序需要的接口,维护一个当前状态,并将与状态相关的操作委托给当前状态对象来处理. 抽象状态(State)角色:定义一个 ...
- 设计模式、原则、饿汉式单例模式、抽象工厂、代理模式、观察者模式、模板方法模式使用场景
设计模式 对各种面向对象方法的一种总结.前辈们遇到了好多设计问题,然后利用面向对象解决了.然后他们把解决方案汇总起来,形成了20多种设计模式.它可以有效的帮助我们利用面向对象,来提高代码的复用性. ...
- 游戏开发设计模式之状态模式 有限状态机 c#委托事件(unity3d 示例实现)
命令模式:游戏开发设计模式之命令模式(unity3d 示例实现) 对象池模式:游戏开发设计模式之对象池模式(unity3d 示例实现) 原型模式:游戏开发设计模式之原型模式 & unity3d ...
- 策略模式、观察者模式、状态模式原理及实例
策略模式 基本介绍 策略模式(Strategy Pattern)中,定义算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户 这算法体现了几个设计原则. 第一 把变化的 ...
- 图解Java设计模式学习笔记——行为型模式(模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式)
一.模板方法模式(模板模式)--钩子方法 1.需求-豆浆制作问题 编写制作豆浆的程序,说明如下: 制作豆浆的流程选材-->添加配料-->浸泡-->放到豆浆机打碎. 通过添加不同的配料 ...
- 设计模式第十二次作业——观察者模式、状态模式
组件协作模式:现代软件专业分工之后的第一个结果是"框架与应用程序的划分","组件协作"模式通过晚期绑定,来实现框架与 应用程序之间的松耦合,是二者之间协作时常用 ...
最新文章
- java抓取网页标题内容_[Java教程]java 网页页面抓取标题和正文
- 我所理解的原型原型链
- 使用Hash直接登录Windows
- php获取屏幕的宽高,JS获取屏幕宽高
- 读书笔记 - 《吉卜力的伙伴们》
- 【pmcaff】2014互联网公司薪资排行榜
- linux C++ 多线程编程
- java接口允许ajax访问_服务允许AJAX请求,允许跨域请求
- 键盘与鼠标器是微型计算机上最常用的,2016年职称计算机考试WindowsXP考前预测试题5...
- 迷宫的最短路径(bfs)
- 解决Hadoop时no namenode to stop异常或则 是 jps中没有namenode
- Ubuntu pip AttributeError: 'module' object has no attribute '_main'
- jsZip上传,jsZip压缩文件并上传到服务器
- IT项目管理追踪表格
- Android 开源项目分类汇总(下)
- ios7新特性--4
- 基于Verilog HDL与虚拟实验平台的【计算机组成】与CPU实验第三章:三态门和多路器
- 色散共焦传感器如何进行同步信号输出?
- VoLTE常用12大知识点
- ConcurrentHashMap1.7深度解析
热门文章
- python复习加总结
- 股价创近11个月新高,欢聚集团靠短视频跟直播为市值撑腰?
- 硬件视角计算机是如何工作的
- 关于WebLogic环境搭建和漏洞复现
- python统计词频
- 入职阿里巴巴数据分析师——我的10个关键转折点
- windows 下制造内存短缺的狠招
- 青岛大学超级计算机,湖南商学院成功主办2019年国家社科基金申报经验交流会...
- html关于圣诞节主题的网页,分享一个2014年圣诞节倒计时页面特效
- Unknown custom element did you register the component correctly