第70章
publicfinalSaiyaStateGODDESS=newGoddessState(this);
Java代码
publicclassSaiyaextendsObservable{
publicfinalSaiyaStateNORMAL=newNormalState(this);
publicfinalSaiyaStateDYING=newDyingState(this);
//观察者模式
setChanged;
notifyObservers(“星矢状态变化”);
publicStringgetlastStatus{
publicclassSaiyaextendsObservable{
//定义星矢的四种状态
publicfinalSaiyaStateNORMAL=newNormalState(this);
publicfinalSaiyaStateDYING=newDyingState(this);
publicfinalSaiyaStateGODDESS=newGoddessState(this);
publicfinalSaiyaStateUNIVERSE=newUniverseState(this);
privateSaiyaStatestate=NORMAL;
privateSaiyaStatelaststate=null;
publicvoidhit{
//调用当前状态的被打方法反过来改变自己的状态
publicStringstatus{
//当前状态名
protectedvoidsetState(SaiyaStatestate){
laststate=;
=state;
//观察者模式
setChanged;
notifyObservers(“星矢状态变化”);
publicStringgetlastStatus{
星矢的状态
Java代码
publicabstractclassSaiyaState{
protectedSaiyasaiya;
publicSaiyaState(Saiyasaiya){
=saiya;
publicStringstatus{
Stringname=www.youxs.org;
(+1);
//星矢被打了
publicabstractvoidhit;www.smrhm.com 幻想小说网
publicabstractclassSaiyaState{
protectedSaiyasaiya;
publicSaiyaState(Saiyasaiya){
=saiya;
publicStringstatus{
Stringname=www.youxs.org;
(+1);
//星矢被打了
publicabstractvoidhit;
在每种状态里面实现被打的时候所需要更改的状态,例如小宇宙爆发状态下被打Java代码
publicclassUniverseStateextendsSaiyaState{
/**
*amsaiya
*/
publicUniverseState(Saiyasaiya){
super(saiya);
/*小宇宙爆发状态被打进入瀕死状态
*/
publicvoidhit{
publicclassUniverseStateextendsSaiyaState{
/**
*amsaiya
*/
publicUniverseState(Saiyasaiya){
super(saiya);
/*小宇宙爆发状态被打进入瀕死状态
*/
publicvoidhit{
雅典娜在一边看,星矢每次被打她都要给星矢加油,她是个观察者,星矢是被观察者,这里星矢实现,每次被打hit就notifyObservers,雅典娜就加油。
Java代码
publicclassAthenaimplementsObserver{
/*我是雅典娜我是观察者
*/
publicvoidupdate(Observablearg0,Objectarg1){
(“雅典娜说:星矢加油啊!”);
publicclassAthenaimplementsObserver{
/*我是雅典娜我是观察者
*/
publicvoidupdate(Observablearg0,Objectarg1){
(“雅典娜说:星矢加油啊!”);
总的来看这个过程就是这样子:
Java代码
publicclassStateMain{
publicstaticvoidmain(Stringargs){
Saiyasaiya=newSaiya;
Observerathena=newAthena;
(athena);
(星矢最初的状态是:+);
for(inti=0;i
话说星矢和很强的某斗士甲对打,雅典娜在一边看,星矢总是挨揍,每次挨揍完之后星矢的状态总是会发生一些变化:
正常——挨打——瀕死——挨打——小宇宙爆发——挨打——瀕死——挨打——女神护体——挨打(星矢无敌了,打也没用,战斗结束)——正常
publicvoidhit{
//调用当前状态的被打方法?反过来改变自己的状态
大B:“那我给你举个圣斗士星矢的状态模式和观察者模式的例子吧!”
以上状态转变用状态模式来表现,一个Saiya类代表星矢,一个SaiyaState代表他的状态,SaiyaState下面有多个子类,分别代表星矢的多种状态,如正常NORMAL、瀕死DYING、小宇宙爆发UNIVERSE、女神护体GODDESS,即把状态抽象成对象,在每种状态里面实现被打的时候所需要更改的状态,这样就避免了每次被打都要进行一次IF/ELSE的判断。
publicStringstatus{
//当前状态名
protectedvoidsetState(SaiyaStatestate){
状态模式:为了方便的控制状态的变化,避免一堆IF/ELSE,以及状态规则改变的时避免代码改动的混乱。
观察者模式:一个被观察者一动,多个观察者跟着动,经常用于界面UI。
小A:“讲了那么多,师兄如果能给我举个例子那就更好了。”
publicfinalSaiyaStateUNIVERSE=newUniverseState(this);
privateSaiyaStatestate=NORMAL;
privateSaiyaStatelaststate=null;
laststate=;
=state;
//定义星矢的四种状态
星矢:动画片《圣斗士星矢》的男猪蹄,超级小强,怎么打也打不死。
雅典娜:动画片《圣斗士星矢》的女猪蹄,自称女神,手下有88个男人为他卖命。
阅读大话设计模式最新章节 请关注米妮小说网(www.qixinyuan.com.cn)
智能推荐:【从婴儿开始入道】【成就魔尊,签到养成三百年】【太上武神诀】【凌皓】【华娱璀璨时代】【万倍返还,为师举世无敌】【我们的家族没落了】【怀上渣男死对头的娃后,我杀疯了】【我,奈克瑟斯奥特曼】【封神还没开始,你篡位了纣王?】【末世之世纪轮回】【周元赵蒹葭】【哲学家们都干了些什么?】【满朝文武都能听到我的心声】【全职法师之超级法神】【不眠春潮】【摆烂太狠,我被宗门当反面教材了】【从尸解仙开始】【黄昏分界】【港综从怒火重案开始】【四合院从美好生活开始】【诡道求仙,从将自己炼成傀儡开始】【天黑请下凡】【九龙归一诀】【君临天下:神话最强帝皇】【从三十而已开始的影视攻略】【华娱之实绩为王】【直播被剧透历史的千古一帝,今天也很尴尬】【每晚都和反派师兄谈心】【天龙八部之行云覆雨】