• 我也设计模式——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();
            }

        }
  • 相关阅读:
    11、旋转图像
    10、有效的数独
    9、两数之和
    8、移动零
    6、两个数组的交集 II
    7、加一
    5、只出现一次的数字
    3、旋转数组
    spring快速复习
    mybatis XML SQL基本配置
  • 原文地址:https://www.cnblogs.com/Jax/p/913948.html
Copyright © 2020-2023  润新知