Ç°ÍùС³ÌÐò£¬Get¸üÓÅÔĶÁÌåÑ飡
Á¢¼´Ç°Íù
Ê×Ò³
ѧϰ
»î¶¯
רÇø
¹¤¾ß
TVP
·¢²¼
ÉçÇøÊ×Ò³ >רÀ¸ >Ҳ̸״̬ģʽ

Ҳ̸״̬ģʽ

Ô­´´
×÷ÕßÍ·Ïñ
С¾ý¾ý
ÐÞ¸ÄÓÚ 2020-08-24 14:39:10
3570
ÐÞ¸ÄÓÚ 2020-08-24 14:39:10
¾Ù±¨
ÎÄÕ±»ÊÕ¼ÓÚרÀ¸£ºÔƶÌÐÅ·þÎñÔƶÌÐÅ·þÎñ
״̬»úÁ÷תͼ
״̬»úÁ÷תͼ

¿´µ½ÉÏÃæµÄÕâ¸ö״̬ת»»Í¼£¬Ò»°ãÀ´ËµÎÒÃÇ»¹Ïë²»µ½ÓÃ״̬»úģʽȥ½â¾ö£¬ÒòΪ̫¼òµ¥ÁË£¬¼òµ¥µÃ¿ÉÄܼ¸ÐдúÂë¾Í´¦ÀíÁË¡£

switch-case ´ó·¨

ͨ³£ÎÒÃÇÒ»°ã»áʹÓÃÏÂÃæµÄ´úÂë´¦Àí״̬»úÁ÷תµÄÐèÇó£¬

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
enum Event {
  EVENT_LOGIN,    // µÇ¼Ê¼þ
  EVENT_LOGOUT,   // µÇ³öʼþ
  EVENT_EXPIRED,  // µÇ¼¹ýÆÚʼþ
  EVENT_UNKNOWN,
};

enum State {
  STATE_START,    // ³õʼ״̬
  STATE_LOGIN,    // µÇ¼״̬
  STATE_UNKNOWN,
};

struct Context {
  State state_;
};

void SwitchCaseMethod(Event event, Context &context) {
  switch (event) {
    case EVENT_LOGIN:
      // do something for login event
      context.state_ = STATE_LOGIN;
      break;
    case EVENT_LOGOUT:
      // do something for logout event
      context.state_ = STATE_START;
      break;
    case EVENT_EXPIRED:
      // do something for expired event
      context.state_ = STATE_START;
      break;
    default:
      // ignore
      break;
  }
}

µ«ÊÇÈç¹û״̬»úµÄ¸´ÔÓ¶ÈÔö¼Óµ½ÏÂÃæÕâÑù£¬

ÄÖÖÓ״̬ת»»Í¼
ÄÖÖÓ״̬ת»»Í¼

ʹÓà switch-case д³öÀ´µÄºÜ¿ÉÄܾͻáÏñÃæÌõÒ»ÑùÁË£¬

Òâ´óÀûÃæÌõ
Òâ´óÀûÃæÌõ

±íÇý¶¯

µ±È»ÎÒÃÇÈç¹û×ö³öÊʵ±µÄ³éÏ󣬿ÉÒÔд³öÀàËÆÓÚÏÂÃæµÄ´úÂ룬

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
enum Event {
  EVENT_LOGIN,    // µÇ¼Ê¼þ
  EVENT_LOGOUT,   // µÇ³öʼþ
  EVENT_EXPIRED,  // µÇ¼¹ýÆÚʼþ
  EVENT_UNKNOWN,
};

enum State {
  STATE_START,    // ³õʼ״̬
  STATE_LOGIN,    // µÇ¼״̬
  STATE_UNKNOWN,
};

struct Context {
  State state_;
};

typedef void (*EventHandler)(Context &context);

void LoginHandler(Context &context) {}
void LogoutHandler(Context &context) {}
void ExpiredHandler(Context &context) {}

#define TABLE_SIZE 255

EventHandler EventHandlerTable[TABLE_SIZE] = {0};

void TableDriveInit() {
  EventHandlerTable[EVENT_LOGIN] = LoginHandler;
  EventHandlerTable[EVENT_LOGOUT] = LogoutHandler;
  EventHandlerTable[EVENT_EXPIRED] = ExpiredHandler;
}

void TableDriveMethod(Event event, Context &context) {
  if (event >= TABLE_SIZE) {
    return;
  }
  auto handler = EventHandlerTable[event];
  if (NULL != handler) {
    handler(context);
  }
}

´úÂëµÄ¿Éά»¤ÐÔÌá¸ßÁ˺ö࣬¿´ÆðÀ´ºÜ¸É¾»¡£µ«ÊÇÈç¹ûʼþÔö¼Óµ½¼¸Ê®¸ö£¬×´Ì¬Ò²Ôö¼Óµ½¼¸Ê®¸ö£¬ÉÏÃæµÄ·½Ê½Ò²ÈÃÈ˳Բ»ÏûÁË£¬ÄÇôÎÒÃÇÐèÒªÒý³ö״̬ģʽ½â¾öÎÒÃǵÄÎÊÌâÁË¡£

״̬ģʽ

״̬ģʽµÄ¶¨Òå¿ÉÒÔÔÚÕâÀïÕÒµ½£¬¿ÉÒÔ·¢ÏÖ״̬ģʽËƺõºÍÎÒÃǵĴ¦ÀíÂß¼­ÓÐЩ²îÒ죬ÄǾÍÊdzéÏóµÄ״̬·½·¨Ö»ÓÐÒ»¸ö doAction£¬ºÍÎÒÃÇ login¡¢logout ºÍ expired ÓÐЩ²îÒ죬ÄÇôÎÒÃÇÖ»ÐèÒªÔö¼Ó¼¸¸ö·½·¨¼´¿É£¬¾ÍÏñÏÂÃæÕâÑù£¬

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
enum Event {
  EVENT_LOGIN,    // µÇ¼Ê¼þ
  EVENT_LOGOUT,   // µÇ³öʼþ
  EVENT_EXPIRED,  // µÇ¼¹ýÆÚʼþ
  EVENT_UNKNOWN,
};

enum State {
  STATE_START,    // ³õʼ״̬
  STATE_LOGIN,    // µÇ¼״̬
  STATE_UNKNOWN,
};

struct Context {
  State state_;
};

class AbstractState {
 public:
  virtual void onLogin(Context &context) {}
  virtual void onLogout(Context &context) {}
  virtual void onExpired(Context &context) {}
};

class StartState : public AbstractState {
 public:
  virtual void onLogin(Context &context) {
    // do something and transfer to new state
    context.state_ = STATE_LOGIN;
  }
};

class LoginState : public AbstractState {
  virtual void onLogout(Context &context) {
    // do something and transfer to new state
    context.state_ = STATE_START;
  }
  virtual void onExpired(Context &context) {
    // do something and transfer to new state
    context.state_ = STATE_START;
  }
};

ÕâÑù¾ÍÄÜÂú×ãÔÚÿ¸ö״̬ÏÂÖ»×öÕâ¸ö״̬¸ÐÐËȤµÄÊÂÇ飬ÆäËûµÄ¶¼¿ÉÒÔºöÂÔ£¬ÕâÑùÎÒÃÇÄܹ»Ó¦¶Ô´ó²¿·Ö³¡¾°¡£

¸ü½øÒ»²½

ÉÏÃæÎÒÃÇËù˵µÄÄܹ»µÄÓ¦¶Ô´ó²¿·Ö³¡¾°ÑÔÍâÖ®Òâ¾ÍÊÇÓÐЩ³¡¾°»¹ÊÇÓ¦¶Ô²»ÁË£¬±ÈÈçʼþ¾­³£±ä»¯µÄ³¡¾°¾ÍÐèÒª¸Ä¶¯³éÏóÀ࣬¿É²Î¿¼ spring-statemachine ¿ò¼Ü£¬¿ò¼Ü°Ñ״̬¡¢Ê¼þºÍ¶¯×÷µÄ×¢²á½øÐÐÁ˳éÏó£¬ÐÞ¸Äʱ²»ÐèÒªÐ޸ĻùÀàÖ»ÐèÒªÐÞ¸Ä×¢²áµÄʼþ¡¢×´Ì¬ºÍ¶¯×÷¡£

²Î¿¼ÎÄÏ×

ÓÎÏ·È˹¤ÖÇÄܱà³Ì°¸Àý¾«´â£¬https://book.douban.com/subject/3081930/

´úÂë´óÈ«µÚÊ®°ËÕ£¬https://book.douban.com/subject/1477390//

ÖªºõÕâ¸öÎÊÌâÏÂÓкܶà¸ßÖÊÁ¿µÄ»Ø´ð£¬https://www.zhihu.com/question/31845498

ÓÐÔÞ¹¤×÷Á÷ÒýÇ棬https://tech.youzan.com/workflow-engine-in-youzan-devops/

spring-statemachine ʵ¼ù£¬/developer/article/1534194

ÖÕ¼«´ó·¨£¬https://book.douban.com/subject/21964984/

Ô­´´ÉùÃ÷£º±¾ÎÄϵ×÷ÕßÊÚȨÌÚѶÔÆ¿ª·¢ÕßÉçÇø·¢±í£¬Î´¾­Ðí¿É£¬²»µÃתÔØ¡£

ÈçÓÐÇÖȨ£¬ÇëÁªÏµ cloudcommunity@tencent.com ɾ³ý¡£

Ô­´´ÉùÃ÷£º±¾ÎÄϵ×÷ÕßÊÚȨÌÚѶÔÆ¿ª·¢ÕßÉçÇø·¢±í£¬Î´¾­Ðí¿É£¬²»µÃתÔØ¡£

ÈçÓÐÇÖȨ£¬ÇëÁªÏµ cloudcommunity@tencent.com ɾ³ý¡£

ÆÀÂÛ
µÇ¼ºó²ÎÓëÆÀÂÛ
0 ÌõÆÀÂÛ
ÈȶÈ
×îÐÂ
ÍƼöÔĶÁ
Ŀ¼
  • switch-case ´ó·¨
  • ±íÇý¶¯
  • ״̬ģʽ
  • ¸ü½øÒ»²½
  • ²Î¿¼ÎÄÏ×
Áìȯ
ÎÊÌâ¹éµµ×¨À¸ÎÄÕ¿ìѶÎÄÕ¹鵵¹Ø¼ü´Ê¹éµµ¿ª·¢ÕßÊÖ²á¹éµµ¿ª·¢ÕßÊÖ²á Section ¹éµµ
http://www.vxiaotou.com