设计模式-状态模式(state pattern)

名称: 状态模式

说说:

动机:

适用性:

参与者:

结果:允许对象在内部状态改变时,改变自身的行为

类图:


说明:把状态改变的权力交给状态对象(本该属于context 的)

demo c#:

namespace state {
    class Program {
        static void Main(string[] args) {
            context c = new context();
            c.shopping();
            c.shopping();
            c.shopping();
            c.shopping();

            Console.Read();
        }
    }
    // main code
    interface iState {
        void handle(context c);
    }
    class search : iState {
        public void handle(context c) {
            if (c.data == "") {
                Console.WriteLine("找到一家服装店,开始选衣服了");
                c.data = "search";
                c.currentState = new tryOn();
            } else { 
                c.data = "error!";
                Console.WriteLine("error on state of search!");
            }
        }
    }
    class tryOn : iState {
        public void handle(context c) {
            if (c.data == "search") {
                Console.WriteLine("选好衣服了,开始试衣服");
                c.data = "tryOn";
                c.currentState = new pay();
            } else {
                c.data = "error!";
                Console.WriteLine("error on state of tryOn!");
            }
        }
    }
    class pay : iState {
        public void handle(context c) {
            if (c.data == "tryOn") {
                Console.WriteLine("衣服不错,结账");
                c.data = "pay";
                c.currentState = new package();
            } else {
                c.data = "error!";
                Console.WriteLine("error on state of pay!");
            }
        }
    }
    class package : iState {
        public void handle(context c) {
            if (c.data == "pay") {
                Console.WriteLine("买好了,走人");
                c.data = "";
                c.currentState = new search();
            } else {
                c.data = "error!";
                Console.WriteLine("error on state of package!");
            }
        }
    }
    // 以买衣服为例 假设分:1挑选 2试穿 3付钱  4打包 几个状态
    class context {
        object _data;
        iState _currentState;
        public context() { 
            this.data = "";
            this._currentState = new search();
        }
        public void shopping() { 
            this._currentState.handle(this);
        }

        public iState currentState {
            get { return this._currentState;}
            set { this._currentState = value;}
        }
        public object data{
            get { return this._data; }
            set { this._data = value; }
        }
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值