登陆注册
8183300000169

第169章 10 如何使用状态模式

小A:“如何使用状态模式?”

大B:“状态模式可以允许客户端改变状态的转换行为,而状态机则是能够自动改变状态,状态机是一个比较独立的而且复杂的机制,具体可参考一个状态机开源项目:状态模式在工作流或游戏等各种系统中有大量使用,甚至是这些系统的核心功能设计,例如政府OA中,一个批文的状态有多种:未办;正在办理;正在批示;正在审核;已经完成等各种状态,使用状态机可以封装这个状态的变化规则,从而达到扩充状态时,不必涉及到状态的使用者。在网络游戏中,一个游戏活动存在开始;开玩;正在玩;输赢等各种状态,使用状态模式就可以实现游戏状态的总控,而游戏状态决定了游戏的各个方面,使用状态模式可以对整个游戏架构功能实现起到决定的主导作用。State需要两种类型实体参与:1、state manager 状态管理器,就是开关,如上面例子的Context实际就是一个state manager在state manager中有对状态的切换动作。2、用抽象类或接口实现的父类,不同状态就是继承这个父类的不同子类。”

以上面的Context为例。我们要修改它,建立两个类型的实体。

第一步:

首先建立一个父类:

public abstract class State{

public abstract void handlepush(Context c);

public abstract void handlepull(Context c);

public abstract void getcolor();

}

父类中的方法要对应state manager中的开关行为,在state manager中这个例子就是Context中,有两个开关动作push推和pull拉。那么在状态父类中就要有具体处理这两个动作:handlepush()handlepull();同时还需要一个获取push或pull结果的方法getcolor()。

下面是具体子类的实现:

public class BlueState extends State{

public void handlepush(Context c){

//根据push方法“如果是blue状态的切换到green”;

c。setState(new GreenState());

}

public void handlepull(Context c){

//根据pull方法“如果是blue状态的切换到red”;

c。setState(new RedState());

}

public abstract void getcolor(){return(Color。blue)}

}

同样 其他状态的子类实现如blue一样。

第二步:

要重新改写State manager 也就是本例的Context:

public class Context{

private Sate state=null;//我们将原来的Color state 改成了新建的State state;

//setState是用来改变state的状态 使用setState实现状态的切换

pulic void setState(State state){

this。state=state;

}

public void push(){

//状态的切换的细节部分,在本例中是颜色的变化,已经封装在子类的handlepush中实现,这里无需关心

state。handlepush(this);

//因为sample要使用state中的一个切换结果,使用getColor()

Sample sample=new Sample(state。getColor());

sample。operate();

}

public void pull(){

state。handlepull(this);

Sample2 sample2=new Sample2(state。getColor());

sample2.operate();

}

}

至此,我们也就实现了State的refactorying过程。

以上只是相当简单的一个实例,在实际应用中,handlepush或handelpull的处理是复杂的。

同类推荐
  • 图说电子计算机

    图说电子计算机

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

    组建家庭局域网与无线网

    该书是“快乐驿站”丛书之一,是一本精心为初级家庭电脑用户打造的局域网与无线网组建入门与提高的图书,同时还涉及一些办公网络的组建内容。《组建家庭局域网与无线网》以局域网和无线网的功能、设置以及实际应用为导向,用生动的实例、形象的图解和幽默的语言循序渐进地介绍了局域网和无线网的概念、产品、设计、组建、调试与维护的相关内容。
  • 计算机网络技术与应用

    计算机网络技术与应用

    本书共8章,系统地介绍了计算机网络的发展和基本原理体系结构、局域网、广域网、网络服务、网络安全、典型网络的结构特点等内容。除第8章外,其他各章都附有练习题。为了加强学习效果,本书围绕知识点的典型性,精选了6个实验。此外,在本书的第8章,我们综合各章知识设计了“办公局域网组建设计”和“中小型企业局域网组建设计”这两个常用的计算机网络技术应用实例,供学生学习和参考。本教材适合作为本科非计算机专业学生的计算机网络教材。
  • 一本书读懂大数据

    一本书读懂大数据

    本书是深入研究互联网思维的经典之作,从互联网思维的定义到互联网思维应用的具体案例表现。作者深入浅出、条分缕析,全面阐述互联网思维的内核与精神,逐一点评当前关于互联网思维的各种观点。本书从最初级的互联网思维应用到高端的粉丝经济,平台建设,自媒体营销的方法都有详细讲解介绍。让读者了解什么是互联网思维的同时还能学会把互联网思维运用到自己的工作学习已经生活中。
  • 公开时刻

    公开时刻

    本书从传播者分析,内容分析,媒介分析受众与效果分析,传播环境与传播控制分析等几大方面把汶川地震作为重大传播案例,阐释汶川地震的传播学遗产。对政府部门和新闻媒体在危机公关方面做出正面评价。
热门推荐
  • 星战甲

    星战甲

    未知的星系带来的是未知的秘密,这个秘密是好是坏,没人知道,人类的历史最终会导向何处。
  • 天行

    天行

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

    神级狂医在花都

    重回都市冷酷医生强者归来赚钱重回都市冷酷医生强者归来赚钱
  • 回到25年前

    回到25年前

    如果,再让你活一次,你想从什么时候开始?突如其来的玉佩,神神叨叨的老头,穿越回去看着自己出生又是一种什么体验?重活一遍,又将产生什么样的化学反应呢?
  • 发条短信给我的异界老婆

    发条短信给我的异界老婆

    一场神秘手机引发的异常,我的QQ能连接异世界。什么?伏地魔、巫妖王、小丑巴基、恐怖博士等幻想位面大反派和异世界魔王魔神因为地球时空参数异常穿越到地球,地球成了异界穿越胜地?没关系,我在QQ农场里种植功法技能和灵药仙种,我在QQ牧场里培育战舰兽和魔宠,发个QQ泡异界美眉,我要召唤我的异世界老婆帮我作战。我的精灵公主粉丝是个喜欢吃小说的奇葩吃货,我的魔王奴仆痴迷美少女游戏誓要打下百合后宫,我的saber版巫妖王想要制霸国际影视界,我的逗比手下赵信立志成为史上最强王者。于是,成立影视娱乐公司,拯救被女魔王看上的美眉,当大明星,召集最强王者队伍带菊花信装逼带他飞,还要到修真学院给一帮筑基期老教授讲符文法器科技自动化原理,我要做的事一点都不少。我叫夏淡,我的地球我做主。PS:本书已内签,请放心收藏。
  • 盛夏宦官妻

    盛夏宦官妻

    夏沫凉在既笄那年因为被人强要了而决心不嫁皇上,说出了“宁家宦官为妻,不嫁皇室为妾”的前无古人后无来者的壮语。她嫁给了人人惧怕的大太监九千岁---墨炙夏。她与他相处,她渐渐的喜欢上了那个杀人不眨眼的大太监,他的一切,都让她莫名的关注。因为被人设计,九千岁的夫人和八皇子在熙佛寺幽会的事情传得沸沸扬扬,夏沫凉这种“不贞不洁”的人,理应浸猪笼,但在行刑前墨炙夏蹲在她面前,对她说道:“本督可以放你一条生路......”“大人......”夏沫凉的眼泪迷了眼眶......那一世,那段劫,那片情。谁应了谁的劫数,谁又该续谁的前缘。为什么,偏偏在她爱上他之时,生出如此事端,这,难道是他与她的有缘无份么?
  • 玄天升奇录

    玄天升奇录

    天地动荡,道法飞舞,有情者和无情者,都在这世界绽放出最极致的光彩
  • 妻权

    妻权

    戴家庶三子,资质平庸,碌碌无为,独独看中了千家嫡长女,大家伙儿横眉冷对:“癞蛤蟆想吃天鹅肉”!千渺却道:“爹!我想嫁他!”成名之后,封王拜相,高官厚禄,关键时刻她竟退缩了!大家伙儿赶鸭子上架:“嫁!必须嫁!!还要大张旗鼓地嫁!”
  • 丧尸归来之乱世枭雄

    丧尸归来之乱世枭雄

    当丧尸归来,已经被号称人类杀手的"S"病毒折磨的只剩下三分之一的人类会如何?当丧尸归来,拥有神秘身世的石珂樂会在乱世中何如何从?
  • 来到异界变成猫

    来到异界变成猫

    从人变猫,就适应而言,这是一个艰难的过程。只是在无比清晰的现实面前,所有的一切都已经无法改变。既然如此,那么就干脆享受它好了,何必为难自己呢...所以苏闲从开始一丢丢的排斥,变成了完全的接受并且享受身为猫的生活。但是,他的饲主,那个每天喂食的人,却是个神经病魔女!当然并不是真的神经病,而是有着作死精神的神经病!……QQ书友群:573541223