首页 > 程序开发 > Web开发 > ASP.Net >

步步为营 .NET 设计模式学习笔记 八、State(状态模式)

2011-04-14

概述 允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它所属的类。意图 状态模式主要解决的是当控制一个对象状态装换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂

概述

允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它所属的类。意图

状态模式主要解决的是当控制一个对象状态装换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简单化。

当一个对象行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为时,就可以考虑使用状态模式了。

<Design Pattern>State模式结构图

image

示例关系图

描述: 一年有12个月,有四个季度,每个月都有一属于一个季度,根据月份得到这个季度的天气信息.可以用State模式来实现.

关系图:

image

代码设计:

先创建接口IQuarter.cs:

view sourceprint?01 public interface IQuarter

02 {

03 /// <summary>

04 /// 通过月份获取季度

05 /// </summary>

06 /// <param name="Month"></param>

07 /// <returns></returns>

08 Quarter GetQuarter();

09

10 /// <summary>

11 /// 气候条件

12 /// </summary>

13 /// <returns></returns>

14 string Climate();

15 }

再创建Quarter.cs:

view sourceprint?01 public abstract class Quarter:IQuarter

02 {

03 private int _Month = 0;

04 public int Month

05 {

06 get

07 {

08 return _Month;

09 }

10 set

11 {

12 _Month = value;

13 }

14 }

15 public Quarter(int month )

16 {

17 this.Month = month;

18 }

19

20 #region IQuarter 成员

21

22 public abstract Quarter GetQuarter();

23

24 public abstract string Climate();

25

26 #endregion

27

28

29 }
view sourceprint?1 再创建Spring.cs:
view sourceprint?01 public class Spring : Quarter

02 {

03

04 private Quarter quarter;

05 public override string Climate()

06 {

07 return "春风宜人,鸟语花香,正是旅游的好季节。";

08 }

09

10 public override Quarter GetQuarter()

11 {

12 if (Month > 3)

13 {

14 quarter = new Summer(Month);

15 return quarter.GetQuarter();

16 }

17 return new Spring(Month);

18 }

19 public Spring(int month):base(month)

20 {

21

22 }

23 }

再创建Summer.cs:

view sourceprint?01 public class Summer : Quarter

02 {

03 private Quarter quarter;

04 public override string Climate()

05 {

06 return "夏季天气炎热,酷暑难熬.";

07 }

08 public override Quarter GetQuarter()

09 {

10 if (Month < 4)

11 {

12 quarter = new Spring(Month);

13 return quarter.GetQuarter();

14 }

15 if (Month > 6)

16 {

17 quarter = new Autumn(Month);

18 return quarter.GetQuarter();

19 }

20

21 return new Summer(this.Month);

22

23 }

24 public Summer(int month): base(month)

25 {

26

27 }

28 }

再创建 Autumn.cs:

vie

相关文章
最新文章
热点推荐