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();
}
}
查看全文
相关阅读:
linux_进程管理
Linux-日志管理
Httpd
Linux-源码安装包管理
Linux-计划任务管理
Linux-LVM管理
Linux-系统磁盘管理
Linux-yum工具的使用
Linux-rpm包管理
Linux-网络进阶管理
原文地址:https://www.cnblogs.com/Jax/p/913948.html
最新文章
i love dingning
cf 24 Game (观察+.. 想一想)
cf Two Sets (我用二分最大匹配做的)
hdu 5001 Walk (概率dp)
hdu 5018 Revenge of GCD
VS 2013 配置份openGL环境
爱情,是什么!一个北大老师写的(将自己的心沉淀下来,用心看)
中国最有意境的33句
我为啥开始用CSDN博客
我做题、比赛的头文件,不断更新中
热门文章
poj 1129 Channel Allocation(图着色,DFS)
Linux_Mysql进阶
Linux_文件查找
Linux_文件处理
Linux_LVM管理
Linux_yum工具的使用
Linux_软件管理
Linux_网络进阶管理
Linux_网络基础管理
Linux_控制服务和守护进程
Copyright © 2011-2022 走看看