

处理对象的多种状态及其相互转换——状态模式(四)
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.

处理对象的多种状态及其相互转换——状态模式(四)
4 共享状态
在有些情况下,多个环境对象可能需要共享同一个状态,如果希望在系统中实现多个环境对象共享一个或多个状态对象,那么需要将这些状态对象定义为环境类的静态成员对象。
下面通过一个简单实例来说明如何实现共享状态:
如果某系统要求两个开关对象要么都处于开的状态,要么都处于关的状态,在使用时它们的状态必须保持一致,开关可以由开转换到关,也可以由关转换到开。
可以使用状态模式来实现开关的设计,其结构如图5所示:
图5 开关及其状态设计结构图
开关类Switch代码如下所示:
抽象状态类如下代码所示:
两个具体状态类如下代码所示:
编写如下客户端代码进行测试:
输出结果如下:
开关1已经打开!
开关2已经打开!
开关1关闭!
开关2已经关闭!
开关2打开!
开关1已经打开!
从输出结果可以得知两个开关共享相同的状态,如果第一个开关关闭,则第二个开关也将关闭,再次关闭时将输出“已经关闭”;打开时也将得到类似结果。
【作者:刘伟 http://blog.csdn.net/lovelion】
Recommend
-
40
React 和 D3.js 是能帮助我们处理页面元素及其所带来的挑战的伟大工具。它们当然可以一起工作,我们被赋予了在两个工具的界限之间去选择的能力。 —— 本文作者 马克思.西亚斯 自从2011年问世以来,D3.js 已经成为在网络...
-
11
什么是时间戳 准确的说,应该是unix时间戳,是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。一个小时表示为UNIX时间戳格式为:36...
-
9
go string []byte相互转换 jinjiashan · 2017-07-30 13:28:57 · 37463 次点击 · 预计阅读时间...
-
19
by zhangxinxu from https://www.zhangxinxu.com 本文地址:https://www.zhangxinxu.com/wordpress/?p=64...
-
8
处理对象的多种状态及其相互转换——状态模式(五) 5 使用环境...
-
8
6 状态模式总结 状态模式将一个对象在不同状态下的不同行为封装在一个个状态类中,通过设置不同的状态对象可以让环境对象拥有不同的行为,而状态转换的细节对于客户端而言是透明的,方便了客户端的使用。在实际开发中,状态模式具有较高的使用...
-
14
小tip: 了解LinearRGB和sRGB以及使用JS相互转换 这篇文章发布于 2017年12月18日,星期一,23:11,归类于 Graphic相关,
-
11
处理对象的多种状态及其相互转换——状态模式(三) 3 完整解决方...
-
10
处理对象的多种状态及其相互转换——状态模式(二) 2 状态模式概...
-
8
处理对象的多种状态及其相互转换——状态模式(一) “人有...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK