设计模式之行为型模式三Word下载.docx

上传人:b****6 文档编号:16159778 上传时间:2022-11-21 格式:DOCX 页数:11 大小:28.37KB
下载 相关 举报
设计模式之行为型模式三Word下载.docx_第1页
第1页 / 共11页
设计模式之行为型模式三Word下载.docx_第2页
第2页 / 共11页
设计模式之行为型模式三Word下载.docx_第3页
第3页 / 共11页
设计模式之行为型模式三Word下载.docx_第4页
第4页 / 共11页
设计模式之行为型模式三Word下载.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

设计模式之行为型模式三Word下载.docx

《设计模式之行为型模式三Word下载.docx》由会员分享,可在线阅读,更多相关《设计模式之行为型模式三Word下载.docx(11页珍藏版)》请在冰豆网上搜索。

设计模式之行为型模式三Word下载.docx

课本实例:

商场打折

代码如下:

[csharp] 

viewplaincopyprint?

1.class 

cashcontext 

2. 

3. 

//基类类型的对像 

4. 

private 

CashSuper 

cs;

5. 

//初始化时(构造函数),传入具体的对象 

6. 

public 

cashcontext(CashSuper 

csuper) 

7. 

8. 

this.cs 

csuper;

9. 

//将csuper赋给cs,然后计算cs对象的收到的现金数 

10. 

//通过传入参数的不同,计算不同方式的收到现金数 

11. 

12. 

double 

getresult(double 

money) 

13. 

//根据具体的策略对象,调用其算法的方法 

14. 

15. 

return 

cs.acceptCash(money);

16. 

17. 

18. 

备忘录模式

在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态.

Memento模式比较适用于功能比较复杂的,但需要维护或记录属性历史的类,或者需要保存的属性只是众多属性中的一小部分时,Originator可以根据保存的Memento信息还原到前一状态

游戏的状态保存

1.//一个发起人类:

有攻击力,生命力,还有创建备忘和恢复备忘的功能等 

class 

GameRole 

//生命力 

int 

vit;

Vitality 

get 

set 

vit 

value;

//攻击力 

atk;

Attack 

atk 

;

//防御类 

19. 

def;

20. 

Defense 

21. 

22. 

def 

23. 

24. 

25. 

//状态显示 

26. 

void 

StateDisplay() 

27. 

28. 

Console.WriteLine("

角色当前状态:

"

);

29. 

体力:

{0}"

 

this.vit);

30. 

攻击力:

this.atk);

31. 

防御类:

this.def);

32. 

33. 

34. 

//获得初始状态 

35. 

GetInitState() 

36. 

37. 

this.vit 

100;

38. 

this.atk 

39. 

this.def 

40. 

41. 

//战斗 

42. 

Fight() 

43. 

44. 

0;

45. 

46. 

47. 

48. 

//保存角色状态 

49. 

RoleStateMemento 

SaveState() 

50. 

51. 

//保存状态时,创建存储箱 

52. 

(new 

RoleStateMemento(vit, 

atk, 

def));

53. 

54. 

//恢复角色状态 

55. 

RecoveryState(RoleStateMemento 

memento) 

56. 

57. 

memento.Vitality 

58. 

memento 

.Attack 

59. 

memento.Defense 

60. 

61. 

62. 

//一个备忘录类:

将要备忘的内容存储在备忘录中 

63. 

//角色状态存储箱 

64. 

65. 

66. 

67. 

68. 

69. 

//以上是角色状态存储箱的一些属性 

70. 

RoleStateMemento(int 

vit, 

def) 

71. 

72. 

73. 

74. 

75. 

76. 

77. 

78. 

79. 

80. 

81. 

82. 

83. 

84. 

85. 

86. 

87. 

{atk 

88. 

89. 

//防御力 

90. 

91. 

92. 

93. 

{def 

94. 

95. 

//以上是存储箱的一些函数,是指可以对生命力等状态进行读写 

96. 

97. 

98. 

//一个管理者类:

将备忘录类进行封装,以便在客户端只需要知道管理者这个类,将备忘的 

99. 

//角色状态管理者 

100. 

RoleStateCaretaker 

101. 

102. 

memento;

103. 

Memento 

104. 

105. 

106. 

107. 

108. 

109. 

110. 

//客户端:

111. 

//大战前 

112. 

hejingyuan 

new 

GameRole();

113. 

hejingyuan.GetInitState();

114. 

hejingyuan.StateDisplay();

115. 

116. 

//保存进度 

117. 

stateAdmin 

RoleStateCaretaker();

118. 

stateAdmin.Memento 

hejingyuan.SaveState();

119. 

//大战时,损耗严重 

120. 

hejingyuan.Fight();

121. 

122. 

//恢复之前状态 

123. 

hejingyuan.RecoveryState(stateAdmin.Memento);

124. 

125. 

Console.Read();

126. 

备忘录模式:

当我要保存备忘时,再发起人(游戏角色)这个类中就创建备忘录,备忘录这个类中具有要备忘的一些内容(属性和方法)等,管理者是对备忘录进行包装,在客户端将发起人备忘赋给管理者这个对象,这样客户端的人就不需要知道我备忘的是什么内容了。

迭代器模式

提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。

当你需要访问一个聚集对象,而且不管这些对象是什么都需要遍历的时候,你就应该考虑用迭代器模式

应用:

当你需要对聚集有多种方法遍历时,可以考虑用迭代器模式 

总的来说,迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明地访问集合内部的数据.

乘车买票

1.//Iterator迭代器抽象类 

abstract 

Iterator 

object 

First();

Next();

IsDone();

CurrentItem();

//迭代器就是对一个聚集对象遍历 

//ConcreteIterator具体迭代器类,继承Iterator 

ConcreteIterator 

:

//创建了一个具体聚集对象 

ConcreteAggregate 

aggregate;

current 

ConcreteIterator(ConcreteAggregate 

aggregate) 

this.aggregate 

//初始化时将具体的聚集对象传入 

override 

First() 

aggregate[0];

Next() 

ret 

null;

current++;

if 

(current 

<

aggregate.Count) 

aggregate[current];

ret;

IsDone() 

>

aggregate.Count 

?

true 

false;

CurrentItem() 

//具体迭代器就是对具体聚集对象的操作,也是对抽象迭代器的重写 

//Aggregate 

Aggregate 

CreateIterator();

//抽象聚集类就是要创建迭代器 

//ConcreteAggregate具体聚集类 

继承Aggregate 

IList<

object>

items 

List<

();

CreateIterator() 

ConcreteIterator(this);

Count 

items.Count;

this[int 

index] 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 英语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1