zoukankan
html css js c++ java
我也设计模式——17.State
状态模式是把各种状态封装成不同的类。
关于Context类的实现,不太同于Strategy,虽然原理是一样的:
public
class
Context
{
private
State stateA, stateB, state;
public
Context()
{
stateA
=
new
StateA();
stateB
=
new
StateB();
}
public
void
Request(
int
temp)
{
if
(temp
>
0
)
state
=
stateA;
else
state
=
stateB;
state.Handle();
}
}
可以看到,Request()方法是基于简单工厂的。
还有,Context的ctor是基于单件模式的,可以使用注册工厂来简化。
在Client端的调动方式,就这么简单:
Context context
=
new
Context();
context.Request(
20
);
基于委托的状态模式
委托部分:
public
delegate
void
state();
public
class
ContextUseingDelegate
{
public
state myState;
public
void
ContextInterface()
{
myState();
}
}
我们需要在Context类中使用委托,而在Client端不变:
public
class
Context
{
public
void
Request(
int
temp)
{
ContextUseingDelegate cud
=
new
ContextUseingDelegate();
if
(temp
>
0
)
{
StateA sa
=
new
StateA();
cud.myState
+=
new
state(sa.ConcreteStateA);
}
else
cud.myState
+=
new
state(StateB.ConcreteStateB);
cud.ContextInterface();
}
}
查看全文
相关阅读:
[题解]Magic Line-计算几何(2019牛客多校第三场H题)
[题解]Crazy Binary String-前缀和(2019牛客多校第三场B题)
[数论]快速幂取模
[模板]大整数乘法——累加型
[动态规划] 最大子段和问题
2073
17-2-24-D
17-1-31-C
2032
1992
原文地址:https://www.cnblogs.com/Jax/p/913948.html
最新文章
C语言I博客作业09
C语言I博客作业08
C语言I博客作业07
C语言I博客作业06
C语言I博客作业05
第二次作业
第一次作业
2019春总结作业
第十五周第三次游戏程序设计
第十三周第一次游戏程序设计
热门文章
第十四周第二次游戏程序设计
第十二周总结
第十一周作业
第十周作业
第九周编程总结
[数论]拓展欧几里得算法
[题解]Print a 1337-string...-数学(codeforces 1202D)
[题解]Shorten IPv6 Address-模拟(2019牛客多校第六场B题)
[题解]Yet Another Subarray Problem-DP 、思维(codeforces 1197D)
[题解]RGB Substring (hard version)-前缀和(codeforces 1196D2)
Copyright © 2011-2022 走看看