设计模式之State - 编程入门网
经常会在Open 状态和Close状态间转换。
例如: 经典的TcpConnection, Tcp的状态有创建 侦听 关闭三个,并且反复转换,其创建 侦听 关闭的具体行为不是简单一两句就能完成的,适合使用State 例如:信箱POP帐号, 会有四种状态, start HaveUsername Authorized quit,每个状态对应的行为应该是比较大的.适合使用State 例如:在工具箱挑选不同工具,可以看成在不同工具中切换,适合使用State.如 具体绘图程序,用户可以选择不同工具绘制方框 直线 曲线,这种状态切换可以使用State。 如何使用 State需要两种类型实体参与: 1.state manager 状态管理器,就是开关,如上面例子的Context实际就是一个state manager, 在state manager中有对状态的切换动作。 2.用抽象类或接口实现的父类,,不同状态就是继承这个父类的不同子类。 以上面的Context为例.我们要修改它,建立两个类型的实体。 第一步: 首先建立一个父类:
父类中的方法要对应state manager中的开关行为,在state manager中本例就是Context中,有两个开关动作push推和pull拉.那么在状态父类中就要有具体处理这两个动作:handlepush() handlepull(); 同时还需要一个获取push或pull结果的方法getcolor() 下面是具体子类的实现:
同样其他状态的子类实现如blue一样。 第二步: 要重新改写State manager 也就是本例的Context:
至此,我们也就实现了State的refactorying过程。 以上只是相当简单的一个实例,在实际应用中,handlepush或handelpull的处理是复杂的。 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |