.NET乐园
一个梦想,一个行动…… (欢迎光临我的淘宝http://pipis.taobao.com,专营户外手电筒、头灯、营地灯、自行车灯)
动机:允许一个对象在其内部状态改变时改变它的行为。从而使对象看起来似乎修改了其行为。

场景:文件具有只读、读写状态,在不同状态时进行的操作不同。


结构
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();
        }

    }

}


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()
        
{
        }

    }

}


 要点
        1、本模式将所有与一个特定状态相关的行为都放入一个State的子类对象中,在对象状态切换时,切换相应的对象;但同时维护State的接口,这样实现了具体操作与状态转换之间的解耦。
        2、为不同的状态引入不同的对象使得状态转换变得更加明确,而且可以保证不会出现状态不一致的情况,因为转换是原子性的——要么彻底转换,要么不转换。
        3、如果State对象没有实例变量,那么各个上下文可以共享同一个State对象,从而节省对象开支。
posted on 2007-08-19 23:51  Charly  阅读(472)  评论(0编辑  收藏  举报