模式设计(三)------状态模式

                                                    状态模式

本来我还在纠结要说什么模式好,但前几天听到了一件有趣的事,有个研究生曾经把几千行的代码写在一个类里面(里面有无数个if else if else….if else,而且那些方法都在里面实现),然后编译之后根本没错,但是却把系统拖垮了?什么原因了,一位大神帮他找了很久很久都找不出错误。却在最后发觉那个类编译后的class文件大于64KB…….这警示我们写代码要有点技巧,好吧!那我就说一下状态模式,让大家摆脱一下if else痛苦的挣扎吧!

 

顺便看看我真实例子,我记得我曾经做过一个android的考试系统,会有2个状态:用户没WIFI或者Internet不能上网和用户能够上网:

(1)假如能够上网

网上拿考试题目

(2)假如不能上网

数据库拿考试题目


由于以前写代码太年轻了

 

If(State ==1){

       XXOO…

}

Else if(State==2){

    XXOO….

}

…….

 

(可能我毕业了,你们来维护我的代码,谁能明白1,2,3,4这些魔鬼数字呢?)

 

 

好吧,后来我从2B青年进化为普通青年了,请看下面:

 

public static final int INTER_EXAM=1;

public static final int DB_EXAM=2;

if(State == INTER_EXAM){

       XXOO…

}

……

 

这样会不会好一点点呢?呵呵,后面看了设计模式,就变为文艺青年了:


Public abstract class State{

       dojob();

}

Public class InternetState implements State{

       dojob(){

              XXOO…

}

}

Public class DBState implements State{

       dojob(){

              XXOO…

}

}

Public class Handle {

State Internet_State;

State  DB_State;

State  state =null;

       Public voidinit(){

              Internet_State  =  newInternetState();

              DB_State= new DBState();

}

Public void dojob(){

       If(能上网){

              state = Internet_State;

              state.dojob();

}

Else{

              state = DB_State;

              state.dojob();

}

}

}

 

 

好处:

(1)             为了方便举例,所以状态少了点,优势不太多,但当你有上十种状态的时候,而且手机的状态是在无时无刻变化的,这样就很容易管理了

(2)             当你要修改代码时,只需要找到具体State那个类,修改dojob就OK了。

(3)             当需要添加状态的时候,只需要再写一个具体的State来实现抽象State的接口就OK了

 

你想宁愿在你那堆无限冗余复杂的if else 里面痛苦挣扎,还是比较喜欢这种优雅的管理方式呢?

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值