11

处理对象的多种状态及其相互转换——状态模式(四)

 3 years ago
source link: https://blog.csdn.net/LoveLion/article/details/8523105
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

处理对象的多种状态及其相互转换——状态模式(四)

4 共享状态

      在有些情况下,多个环境对象可能需要共享同一个状态,如果希望在系统中实现多个环境对象共享一个或多个状态对象,那么需要将这些状态对象定义为环境类的静态成员对象

      下面通过一个简单实例来说明如何实现共享状态:

      如果某系统要求两个开关对象要么都处于开的状态,要么都处于关的状态,在使用时它们的状态必须保持一致,开关可以由开转换到关,也可以由关转换到开。

      可以使用状态模式来实现开关的设计,其结构如图5所示:

图5 开关及其状态设计结构图

      开关类Switch代码如下所示:

       抽象状态类如下代码所示:

       两个具体状态类如下代码所示:

       编写如下客户端代码进行测试:

       输出结果如下:

开关1已经打开!

开关2已经打开!

开关1关闭!

开关2已经关闭!

开关2打开!

开关1已经打开!

       从输出结果可以得知两个开关共享相同的状态,如果第一个开关关闭,则第二个开关也将关闭,再次关闭时将输出“已经关闭”;打开时也将得到类似结果。

【作者:刘伟 http://blog.csdn.net/lovelion


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK