知识大全 圣斗士星矢的状态模式和观察者模式
Posted 状态
篇首语:亦余心之所善兮,虽九死其犹未悔。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 圣斗士星矢的状态模式和观察者模式相关的知识,希望对你有一定的参考价值。
星矢 动画片《圣斗士星矢》的男猪脚 超级小强 怎么打也打不死
雅典娜 动画片《圣斗士星矢》的女猪脚 自称女神 手下有 个男人为他卖命
状态模式 为了方便的控制状态的变化 避免一堆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();
星矢的状态
Java代码
public abstract class SaiyaState protected Saiya saiya; public SaiyaState(Saiya saiya) this saiya = saiya; public String status() String name=getClass() getName(); return name substring(name lastIndexOf( )+ ); //星矢被打了 public abstract void hit(); public abstract class SaiyaState protected Saiya saiya; public SaiyaState(Saiya saiya) this saiya = saiya; public String status() String name=getClass() getName(); return name substring(name lastIndexOf( )+ ); //星矢被打了 public abstract void hit();
在每种状态里面实现被打的时候所需要更改的状态 例如小宇宙爆发状态下被打
Java代码
public class UniverseState extends SaiyaState /** * @param saiya */ public UniverseState(Saiya saiya) super(saiya); /* 小宇宙爆发状态被打进入濒死状态 * */ public void hit() saiya setState( saiya DYING); public class UniverseState extends SaiyaState /** * @param saiya */ public UniverseState(Saiya saiya) super(saiya); /* 小宇宙爆发状态被打进入濒死状态 * */ public void hit() saiya setState( saiya DYING);
雅典娜在一边看 星矢每次被打她都要给星矢加油 她是个观察者 星矢是被观察者 这里星矢实现java util Observable 每次被打hit就notifyObservers 雅典娜就加油
Java代码
public class Athena implements Observer /* 我是雅典娜 我是观察者 * */ public void update(Observable arg Object arg ) System out println( 雅典娜说 星矢加油啊!!! ); public class Athena implements Observer /* 我是雅典娜 我是观察者 * */ public void update(Observable arg Object arg ) System out println( 雅典娜说 星矢加油啊!!! );
总的来看 这个过程就是这样子
Java代码
public class StateMain public static void main(String[] args) Saiya saiya = new Saiya(); Observer athena = new Athena(); saiya addObserver(athena); System out println( 星矢最初的状态是 + saiya status()); for (int i = ; i < ; i++) System out println( 星矢被揍了 + (i + ) + 次 ); saiya hit(); System out println( 星矢现在的状态是 + saiya status()); public class StateMain public static void main(String[] args) Saiya saiya = new Saiya(); Observer athena = new Athena(); saiya addObserver(athena); System out println( 星矢最初的状态是 + saiya status()); for (int i = ; i < ; i++) System out println( 星矢被揍了 + (i + ) + 次 ); saiya hit(); System out println( 星矢现在的状态是 + saiya status());
结果星矢在雅典娜的帮助下 有惊无险的战胜了很强的某斗士甲
Java代码
星矢最初的状态是 NormalState
星矢被揍了 次
雅典娜说 星矢加油啊!!!
星矢现在的状态是 DyingState
星矢被揍了 次
雅典娜说 星矢加油啊!!!
星矢现在的状态是 UniverseState
星矢被揍了 次
雅典娜说 星矢加油啊!!!
星矢现在的状态是 DyingState
星矢被揍了 次
雅典娜说 星矢加油啊!!!
星矢现在的状态是 GoddessState
星矢被揍了 次
雅典娜说 星矢加油啊!!!
星矢现在的状态是 NormalState
星矢最初的状态是 NormalState
星矢被揍了 次
雅典娜说 星矢加油啊!!!
星矢现在的状态是 DyingState
星矢被揍了 次
雅典娜说 星矢加油啊!!!
星矢现在的状态是 UniverseState
星矢被揍了 次
雅典娜说 星矢加油啊!!!
星矢现在的状态是 DyingState
星矢被揍了 次
雅典娜说 星矢加油啊!!!
星矢现在的状态是 GoddessState
星矢被揍了 次
雅典娜说 星矢加油啊!!!
星矢现在的状态是 NormalState
cha138/Article/program/Java/gj/201311/27341相关参考
简单地说观察者模式定义了一个一对多的依赖关系让一个或多个观察者对象监察一个主题对象这样一个主题对象在状态上的变化能够通知所有的依赖于此对象的那些观察者对象使这些观察者对象能够自动更新 观察者模式
观察者模式定义了一个一对多的对象关系一个主体对象对应多个观察者对象当主体对象发生改变时所有它对应的观察者对象都会自动得到通知并更新 本文将给出一个相应的事例具体说明观察者模式是如果工作的这个事例
【观察者模式应用场景举例】 比如在玩极品飞车这款游戏每一个车手到达终点的时候都会在其它车手的屏幕上显示某某人以多少时间到达终点的提示其实这就是一个典型的观察者模式的应用观察者模式即是典型的双向一
知识大全 java 设计模式之 观察者模式(Observer)
java设计模式之观察者模式(Observer) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
在中实现观察者模式?难道中的观察者模式有什么特别么?嗯基于Http协议的Application难免有些健忘我是这样实现的不知道有没有更好的办法? 先谈谈需求吧以免
代码如下:<?php//抽象主题interfaceSubjectpublicfunctionattach($observer);publicfunctiondetach($obser
故事 小雪是一个非常漂亮的女孩漂亮的女孩总是有很多的追求者而且追求者的队伍在不断的变动随时有人进入这个队伍也有人退出男孩们追求女孩时总是表现出%的关心当小雪私自游玩时总是不断收到追求者询问小
Java程序性能优化-观察者模式(3) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  
Java程序性能优化-观察者模式(2)[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 图&
Java程序性能优化-观察者模式(1)[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! pu