C#设计模式——状态模式(State Pattern)
来源:互联网 发布:网通网络测速 编辑:程序博客网 时间:2024/04/30 01:11
一、概述
在面向对象软件设计时,常常碰到某一个对象由于状态的不同而有不同的行为。如果用if else或是switch case等方法处理,对象操作及对象的状态就耦合在一起,碰到复杂的情况就会造成代码结构的混乱。在这种情况下,就可以使用状态模式来解决问题。
二、状态模式
状态模式允许一个对象在其内部状态改变时改变它的行为,使对象看起来似乎修改了它的类。
状态模式的结构图如下
Context代表需要改变状态的那个对象,它维护了一个State实例,该实例定义了对象的当前状态。
State定义了一个抽象类或是接口,用以封装与特定状态相关的行为。
ConcreteState实现了State定义的行为。
三、示例
本文实现一个电灯开关状态,以此为例介绍状态模式的应用。
首先定义状态接口
1 public interface LightState2 {3 void PressSwitch(Light light);4 }
接着实现具体的状态
1 public class LightOn : LightState 2 { 3 public void PressSwitch(Light light) 4 { 5 Console.WriteLine("Light Off"); 6 light.State = new LightOff(); 7 } 8 } 9 10 public class LightOff : LightState11 {12 public void PressSwitch(Light light)13 {14 Console.WriteLine("Light On");15 light.State = new LightOn();16 }17 }
然后定义拥有该状态的对象即电灯
1 public class Light 2 { 3 public LightState State; 4 5 public Light() 6 { 7 State = new LightOff(); 8 } 9 10 public void PressSwtich()11 {12 State.PressSwitch(this);13 }14 }
最后看一下如何调用
1 static void Main(string[] args)2 {3 Light light = new Light();4 light.PressSwtich();5 light.PressSwtich();6 light.PressSwtich();7 8 Console.ReadLine();9 }
输出结果如下
- C#设计模式——状态模式(State Pattern)
- 设计模式 —— 状态模式(State Pattern)
- java设计模式——状态模式(State Pattern)
- Java设计模式——状态模式(STATE PATTERN)
- 设计模式——状态模式(State Pattern)
- Java设计模式——状态模式(STATE PATTERN)
- Java设计模式——状态模式(State Pattern)
- 设计模式学习—状态模式(State Design Pattern)
- C#设计模式之状态者模式(State Pattern)
- 设计模式 - State Pattern(状态模式)
- 设计模式 - State Pattern(状态模式)
- 设计模式之State Pattern 状态模式。
- 设计模式24:State Pattern (状态模式)
- 设计模式-状态模式(State Pattern)
- 设计模式之状态模式(State Pattern)
- 设计模式 - 状态模式(state pattern) 详解
- 设计模式-状态模式(state pattern)
- 设计模式之状态模式---State Pattern
- linux shell 10个好习惯
- C#中Split用法
- 浏览器是如何工作的 - How Browser works(四)
- iOS4中Core Motion框架的介绍和使用
- jquery 密码强度检测
- C#设计模式——状态模式(State Pattern)
- shell 程序结构
- Ubuntu上adb找不到设备问题小结
- 薄荷花开
- qemu调试 linux-kernel
- android 基础 网络获取网页的源文件和图片
- SqlServer之Convert 函数
- vim 语法高亮 解决办法
- 块语法 block timer