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();
}
}
查看全文
相关阅读:
How to bind to data when the DataContext is not inherited【项目】
访问ControlTemplate内部的元素
TemplateBinding vs TemplatedParent【PluraSight】
UserControl和CustomControl基础【PluraSight】
如何让label和textblock分成两行
Labeled ContentControl & LabeledControl【项目】
Label & TextBlock
How to use SourceGear DiffMerge in SourceSafe, TFS, and SVN【项目】
转载 使用WiX Toolset创建.NET程序发布Bootstrapper(安装策略管理)(一&二)——初识WiX
Unity中的C#规则
原文地址:https://www.cnblogs.com/Jax/p/913948.html
最新文章
Rule of write code with C# in Unity3d
Arrays, Hashtables and Dictionaries
IEnumerable 和 IEnumerator
C#泛型在unity3D中的运用...
C#和JavaScript的区别
Generic【Pluralsight】
正确理解ContentPresenter
Routed Events【pluralsight】
Binding的Source从何而来?
DataTemplate和ControlTemplate的关系
热门文章
Common Converters in WPF/Silverlight
有关ListBox
用DependanceProperty做Dynamic换Icon
Custom ReadOnlyProperty【PluraSight】
关于TabControl的Trigger【项目】
DP【PluralSight】
可以binidng属性的属性【项目】
同时使用Binding&StringFormat 显示Text【项目】
Data Binding in WPF
Animation Spinner【项目】
Copyright © 2011-2022 走看看