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

        }
  • 相关阅读:
    简单的javascript抽奖程序
    Linux 二层协议架构组织
    常用正则表达式总结
    很好的矩阵覆盖问题
    很好的求幂的题目
    不错的题目-n个数连接得到的最大值
    netstat命令介绍-要用熟
    一次完整的http事务
    Apache vs. Nginx
    Python学习-生成器
  • 原文地址:https://www.cnblogs.com/Jax/p/913948.html
Copyright © 2011-2022 走看看