登陆注册
8183300000168

第168章 9 是否使用状态模式

小A:“要怎么去决定是否使用状态模式?”

大B:“在实际使用,类似开关一样的状态切换是很多的,但有时并不是那么明显,取决于你的经验和对系统的理解深度。这里要说的是‘开关切换状态’和‘一般的状态判断’是有一些区别的,‘一般的状态判断’也是有if……elseif结构。”

例如:

if(which……1)state=“hello”;

else if(which……2)state=“hi”;

else if(which……3)state=“bye”;

大B:“这是一个‘一般的状态判断’,state值的不同是根据which变量来决定的,which和state没有关系。”

如果改成:

if(state。euqals(“bye”))state=“hello”;

else if(state。euqals(“hello”))state=“hi”;

else if(state。euqals(“hi”))state=“bye”;

大B:“这就是‘开关切换状态’,是将state的状态从‘hello’切换到‘hi’,再切换到‘bye’;在切换到‘hello’,好象一个旋转开关,这种状态改变就可以使用State模式了。如果单纯有上面一种将‘hello’――>‘hi’――>‘bye’――>‘hello’这一个方向切换,也不一定需要使用State模式,因为State模式会建立很多子类,复杂化,但是如果又发生另外一个行为:将上面的切换方向反过来切换,或者需要任意切换,就需要State了。”

请看下例:

public class Context{

private Color state=null;

public void push(){

//如果当前red状态 就切换到。

if(state……Color。red)state=Color。blue;

//如果当前blue状态 就切换到。

else if(state……Color。blue)state=Color。green;

//如果当前black状态 就切换到。

else if(state……Color。black)state=Color。red;

//如果当前green状态 就切换到。

else if(state……Color。green)state=Color。black;

Sample sample=new Sample(state);

sample。operate();

}

public void pull(){

//与push状态切换正好相反

if(state……Color。green)state=Color。blue;

else if(state……Color。black)state=Color。green;

else if(state……Color。blue)state=Color。red;

else if(state……Color。red)state=Color。black;

Sample2 sample2=new Sample2(state);

sample2.operate();

}

}

大B:“在上例中,我们有两个动作push推和pull拉,这两个开关动作,改变了Context颜色,至此,我们就需要使用State模式优化它。另外注意:state的变化,只是简单的颜色赋值,这个具体行为是很简单的,State适合巨大的具体行为,因此,实际使用中也不一定非要使用State模式,这会增加子类的数目,简单的变复杂。”

例如:银行帐户,经常会在Open 状态和Close状态间转换。

例如:经典的TcpConnection,Tcp的状态有创建、侦听、关闭三个,并且反复转换,其创建、侦听、关闭的具体行为不是简单一两句就能完成的,适合使用State。

例如:信箱POP帐号,会有四种状态,start HaveUsername Authorized quit,每个状态对应的行为应该是比较大的。适合使用State。

例如:在工具箱挑选不同工具,可以看成在不同工具中切换,适合使用State。如具体绘图程序,用户可以选择不同工具绘制方框、直线、曲线,这种状态切换可以使用State。

同类推荐
  • 高校校园网管理与网上引导工作研究

    高校校园网管理与网上引导工作研究

    在当今的信息化潮流之下,我们不可否认互联网的出现,绝不仅仅是传送手段的变化,更重要的是它代表着一种新的社会形态——网络社会的来临。互联网已经以一种前所未有的方式渗透到现代社会的各个层面和领域,成为现代社会前进和发展的动力和工具,它推动了社会经济、文化政治实现所谓的“数字化转变”。
  • 悟道:一位IT高管20年的职场心经

    悟道:一位IT高管20年的职场心经

    本书是一位有20多年职场经验的IT企业高管撰写的一系列有关职场悟道的短文集成,讲述的是在企业里如何修炼自己,如何摆平自己的心态,怎样做到“世事洞明”和“人情练达”,如何“搞定老板”,怎样做到工作和生活平衡等诸多话题,涉及到跳槽、转行、升迁、环境、沟通、老板、下属、老外等等。每一篇都以作者的亲身经历或者身边的故事说明道理,语言简洁流畅,妙趣横生,更有不少经典片段和发人深省的职场警句,读起来就像是一个睿智幽默的老朋友坐在你面前娓娓道来。
  • 综合应用软件设计

    综合应用软件设计

    本书是为计算机、信息管理等相关专业高年级本科生在开设相关课程时所编写的一本教学参考书,它将全面指导学生学习、熟悉和运用当今被广泛采纳的一些主流技术去进行综合应用软件设计的有效实践。
  • 图说电子计算机

    图说电子计算机

    今天人们谈到计算机常常会把它和网络联系起来。20世纪90年代兴起的因特网其影响之广、普及之快也是大家始料未及的,也从没有一种技术能像网络一样日新月异,并迅速地改变着我们的学习和生活方式。因特网大大缩小了时空界限,为我们提供了快捷方便的交流途径。在未来10年内,计算机又将会有怎样飞速的发展呢?在互联网上进行医疗诊断、远程教学、电子商务、视频会议等活动已经实现,未来的互联网的传输速率将会提高100倍,大家可以随时随地连接到因特网上,更方便地进行交流、沟通和开展商务活动。
  • 如何建设网站

    如何建设网站

    本书以问答的方式介绍了建设网站的基本知识,内容包括:网站设计的八个步骤、建设网站需要掌握的工具软件、网页中插入图像、在网页中隐藏内容等。
热门推荐
  • 逮捕专属萌宝贝

    逮捕专属萌宝贝

    “怎么?看完了我就想跑?”纤细的小腰被一双大手环上,温热的气息暧昧的在耳边缭绕着。悲催如她,无缘无故被被一幅画卷入了异界,阴差阳错之下却与异界与三位殿下擦出暧昧火花,见面不到三次,他们竟然就开始为自己争风吃醋!然而她却不知道自己,命运赋予了她多大的使命!
  • 天行

    天行

    号称“北辰骑神”的天才玩家以自创的“牧马冲锋流”战术击败了国服第一弓手北冥雪,被誉为天纵战榜第一骑士的他,却受到小人排挤,最终离开了效力已久的银狐俱乐部。是沉沦,还是再次崛起?恰逢其时,月恒集团第四款游戏“天行”正式上线,虚拟世界再起风云!
  • 异国他乡的爱

    异国他乡的爱

    因为家中后妈不喜欢,只能跟着亲戚介绍的老板打工,身在异国他乡语言不通,学历不高,只能每天像老牛一样不停歇的工作,那曾想到在异国也会有爱情降临到自己头上。
  • 炉鼎的修真日常

    炉鼎的修真日常

    轮回空间开局?要修仙?开局被选中成大佬的阴阳童子。什么是阴阳童子?通俗的说就是……炉鼎。
  • 狂将之狂兰

    狂将之狂兰

    狂将,我是天下第一的女将,我是天下第一的医师,我是天下第一的女相,我男扮女装,进杀场,进朝堂,我狂,我忘,忘情,忘爱,只为证明自已,我就是狂兰
  • 龙隐都市游

    龙隐都市游

    龙飞于天,为飞龙。龙潜于海,成海龙。龙隐于市,则必将化腐朽为神奇!看仙王如何执掌都市,醉卧花丛。看潇彬如何为中国而崛起,一步步走向世界巅峰……
  • 谈判缉侦

    谈判缉侦

    未婚夫离奇失踪,平宣市诡案迭生,竟只是一场精心策划的犯罪游戏。为追查真相,冷面女博士徐婉化名进入刑侦队,和“不靠谱”队长一起,谈判缉凶!
  • 天行

    天行

    号称“北辰骑神”的天才玩家以自创的“牧马冲锋流”战术击败了国服第一弓手北冥雪,被誉为天纵战榜第一骑士的他,却受到小人排挤,最终离开了效力已久的银狐俱乐部。是沉沦,还是再次崛起?恰逢其时,月恒集团第四款游戏“天行”正式上线,虚拟世界再起风云!
  • 傲娇公子二追妻

    傲娇公子二追妻

    此处预防针:玻璃渣里找糖吃,各位谨慎入坑!!一个是众人口中的纨绔子弟,却无人知道他经历过的万般苦楚。一个是聪慧玲珑的世家小姐,却活的小心翼翼还免不了遭人算计。看起来毫无关系的两人却因一场无比荒谬的替婚风波陷入无休止的纠缠。初见,他满面不屑鄙夷,“……不知羞耻。”再见,他替她出头,“如此,我便先将白姑娘接回去……”后来,他看着她的脸有些无措,“不过是感同身受罢了,你别误会……”他自己想不明白为何,最后才发现自己从未认真想过。她性子平淡,不予一言,只是心里早已中下倾慕的种子。最后她目送他离开,他只道了句谢,那句话还是梗在了喉头。“你是不是……”“不是!还望谢公子能与心上人欢喜与共。”他笑了笑,看着面色平静的她,忍不住拥她入怀……本以为能从此到白头,却不知离别总是无声。
  • 颠覆古代之降魔少女

    颠覆古代之降魔少女

    封氏家族族长封静瑶在一次追击妖魔时,她发出的降魔雷与天雷互击打开了时光之门,而她则因损耗太大无法自保而被吸了进去,然后开始了她的异世之旅。他是朝堂之上呼风唤雨的宰相,他秉公办案不徇私情,为国、为家、为民甘愿冒着生命危险。在一次办案途中,他邂诟了她,迷一样的女人。一次偶然的相遇,不经意的一个眼神交换,他,年轻英俊的帝王,在那一刻拨动了她的心弦。可拥有无数女人的他却无法只将她一人放在心中。深山之中刻苦修行,只为有朝一日成仙升天,仙友指路,他的仙劫是情,他淡笑而过。谁知就在成仙的前夕他遇到了她。而她这个天界遗落在凡间的仙子,她的情终将归于何处……