动机:允许一个对象在其内部状态改变时改变它的行为。从而使对象看起来似乎修改了其行为。
场景:文件具有只读、读写状态,在不同状态时进行的操作不同。
结构
代码
要点:
1、本模式将所有与一个特定状态相关的行为都放入一个State的子类对象中,在对象状态切换时,切换相应的对象;但同时维护State的接口,这样实现了具体操作与状态转换之间的解耦。
2、为不同的状态引入不同的对象使得状态转换变得更加明确,而且可以保证不会出现状态不一致的情况,因为转换是原子性的——要么彻底转换,要么不转换。
3、如果State对象没有实例变量,那么各个上下文可以共享同一个State对象,从而节省对象开支。
场景:文件具有只读、读写状态,在不同状态时进行的操作不同。
结构
代码
namespace DesignPattern.State
{
public class File
{
private FileState state;
public File(FileState state)
{
this.state = state;
}
public FileState State
{
get
{
return state;
}
set
{
state = value;
}
}
public void Process1()
{
state.Process1();
}
public void Process2()
{
state.Process2();
}
public void Process3()
{
state.Process3();
}
}
}
{
public class File
{
private FileState state;
public File(FileState state)
{
this.state = state;
}
public FileState State
{
get
{
return state;
}
set
{
state = value;
}
}
public void Process1()
{
state.Process1();
}
public void Process2()
{
state.Process2();
}
public void Process3()
{
state.Process3();
}
}
}
namespace DesignPattern.State
{
public abstract class FileState
{
public abstract void Process1();
public abstract void Process2();
public abstract void Process3();
}
public class ReadOnlyState : FileState
{
public override void Process1()
{
}
public override void Process2()
{
}
public override void Process3()
{
}
}
public class ReadWriteState : FileState
{
public override void Process1()
{
}
public override void Process2()
{
}
public override void Process3()
{
}
}
}
{
public abstract class FileState
{
public abstract void Process1();
public abstract void Process2();
public abstract void Process3();
}
public class ReadOnlyState : FileState
{
public override void Process1()
{
}
public override void Process2()
{
}
public override void Process3()
{
}
}
public class ReadWriteState : FileState
{
public override void Process1()
{
}
public override void Process2()
{
}
public override void Process3()
{
}
}
}
要点:
1、本模式将所有与一个特定状态相关的行为都放入一个State的子类对象中,在对象状态切换时,切换相应的对象;但同时维护State的接口,这样实现了具体操作与状态转换之间的解耦。
2、为不同的状态引入不同的对象使得状态转换变得更加明确,而且可以保证不会出现状态不一致的情况,因为转换是原子性的——要么彻底转换,要么不转换。
3、如果State对象没有实例变量,那么各个上下文可以共享同一个State对象,从而节省对象开支。
欢迎光临我的淘宝http://shop35795100.taobao.com,专营游戏点卡、电话卡及各类充值卡。