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();
}
}
查看全文
相关阅读:
[转帖]VI使用手册
hadoop安装配置
永远的beyond!(4 days left to get back touch)
求比较+围观(3 days left to get back touch)
Windows及其他软件开发过程中一般都有哪些版本?
程序员的7个坏习惯
回来真好,,,
Windows8 consumer preview的第一次
那些年,备胎一起追的女神
准备开始CP之旅。。。。(DP is Over!)
原文地址:https://www.cnblogs.com/Jax/p/913948.html
最新文章
游戏功能开发流程如何尽量减少bug率
windows下搭建lisp编译环境
ubuntu12.04 卸载和安装mysql
游戏lua内存优化
开始我的技术博客
编写可读性代码
1,pytes框架介绍及与unittest框架对比
【vijeodesigner】入门教程新建工程
【vijeodesigner】入门教程vijeo designer软件建立工程的一般步骤
数据库间操作小记 Frida
热门文章
JavaScript MicroTemplating Frida
安装apache时提示failed to open the winNT service manager Frida
SqlServer2005还原数据库3154错误解决方法 Frida
sql 2005 局域网备份 Frida
Table边框使用总结 ,只显示你要显示的边框 Frida
转 Android WebView应用详解 Frida
IOS开发者账号的相关配置
[转载]知乎上一篇关于怎样面试IOS工程师的回答,用于面试和学习都不错
iPhone及iPad中,各种默认工具条的高度
iOS代码片段
Copyright © 2011-2022 走看看