zoukankan      html  css  js  c++  java
  • State Design Pattern

    注:

    转载自 https://www.geeksforgeeks.org/state-design-pattern/  【以便查阅,非原创】

    State Design Pattern

    State pattern is one of the behavioral design pattern. State design pattern is used when an Object changes its behavior based on its internal state.

    If we have to change behavior of an object based on its state, we can have a state variable in the Object and use if-else condition block to perform different actions based on the state. State pattern is used to provide a systematic and lose-coupled way to achieve this through Context and State implementations.

    UML Diagram of State Design Pattern

    State-Design-Pattern

      • Context: Defines an interface to client to interact. It maintains references to concrete state object which may be used to define current state of object.
      • State: Defines interface for declaring what each concrete state should do.
      • ConcreteState: Provides implementation for methods defined in State.

      Example of State Design Pattern 
      In below example, we have implemented a mobile state scenario . With respect to alerts, a mobile can be in different states. For example, vibration and silent. Based on this alert state, behavior of the mobile changes when an alert is to be done.

    • // Java program to demonstrate working of
      // State Design Pattern
       
      interface MobileAlertState
      {
          public void alert(AlertStateContext ctx);
      }
       
      class AlertStateContext
      {
          private MobileAlertState currentState;
       
          public AlertStateContext()
          {
              currentState = new Vibration();
          }
       
          public void setState(MobileAlertState state)
          {
              currentState = state;
          }
       
          public void alert()
          {
              currentState.alert(this);
          }
      }
       
      class Vibration implements MobileAlertState
      {
          @Override
          public void alert(AlertStateContext ctx)
          {
               System.out.println("vibration...");
          }
       
      }
       
      class Silent implements MobileAlertState
      {
          @Override
          public void alert(AlertStateContext ctx)
          {
              System.out.println("silent...");
          }
       
      }
       
      class StatePattern
      {
          public static void main(String[] args)
          {
              AlertStateContext stateContext = new AlertStateContext();
              stateContext.alert();
              stateContext.alert();
              stateContext.setState(new Silent());
              stateContext.alert();
              stateContext.alert();
              stateContext.alert();       
          }
      }

       

    • Output:

      vibration...
      vibration...
      silent...
      silent...
      silent...
    • Advantages of State Design Pattern

      • With State pattern, the benefits of implementing polymorphic behavior are evident, and it is also easier to add states to support additional behavior.
      • In the State design pattern, an object’s behavior is the result of the function of its state, and the behavior gets changed at runtime depending on the state. This removes the dependency on the if/else or switch/case conditional logic. For example, in the TV remote scenario, we could have also implemented the behavior by simply writing one class and method that will ask for a parameter and perform an action (switch the TV on/off) with an if/else block.
      • The State design pattern also improves Cohesion since state-specific behaviors are aggregated into the ConcreteState classes, which are placed in one location in the code.

      Disadvantages of State Design Pattern

      • The State design pattern can be used when we need to change state of object at runtime by inputting in it different subclasses of some State base class. This circumstance is advantage and disadvantage in the same time, because we have a clear separate State classes with some logic and from the other hand the number of classes grows up.
  • 相关阅读:
    51CTO资料索引 很不错
    extern和extern“c"作用详解 以及C和C++混合编程 在文章:3.深层揭密extern "C" 部分可以看到 .
    用VC++实现图像检索技术(转)
    OpenSceneGraph FAQ
    NeHe OpenGL教程 02 渲染第一个多边形
    C++经验谈(摘抄)
    利用条件编译实现工程定制版本的自动输出
    没有文件扩展".js"的脚本引擎 解决办法
    OpenGL FAQ
    NeHe OpenGL教程 01 创建OpenGL窗口
  • 原文地址:https://www.cnblogs.com/happyWolf666/p/9348860.html
Copyright © 2011-2022 走看看