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

        }
  • 相关阅读:
    (3)C++复合类型
    (2)C++基本类型
    (7)js调试
    Oracle语句优先级
    oracle排序问题
    jsp四大对象
    postgresql时间加减计算
    全角空格,跟汉字一样宽
    bzoj1433 [ZJOI2009]假期的宿舍 最大流
    BZOJ 1264 AHOI2006 基因匹配Match 动态规划+树状数组
  • 原文地址:https://www.cnblogs.com/Jax/p/913948.html
Copyright © 2011-2022 走看看