设置好内部状态,然后根据不同的函数作为行为模式,进行状态转换。
有点像Finite Automata算法,两者的思想是一样的。
会Finite Automata,那么这个设计模式就很容易了。
#pragma once #include <stdlib.h> #include <math.h> #include <random> #include <time.h> enum STATES { FULLY_RENTED, WAITING, GOT_APPLICATION, APARTMENT_RENTED }; class RentalMethods { STATES state; int numberOfAppartments; public: RentalMethods(int n):state(WAITING), numberOfAppartments(n) { srand((unsigned)time(NULL)); } void getApplication() { switch (state) { case FULLY_RENTED: puts("Sorry, we are fully rented."); break; case WAITING: state = GOT_APPLICATION; puts("Thanks for the application."); break; case GOT_APPLICATION: puts("We already got your application."); break; case APARTMENT_RENTED: puts("Hang on, we are renting you an apartment."); break; } } void checkApplication() { bool yesOrNo = rand() % 2; switch (state) { case FULLY_RENTED: puts("Sorry, we are fully rented."); break; case WAITING: puts("You have to submit an application."); break; case GOT_APPLICATION: { if (yesOrNo && numberOfAppartments > 0) { puts("Congratulations, you were approved."); state = APARTMENT_RENTED; rentApartment(); } else { puts("Sorry, you were not approved."); state = WAITING; } } break; case APARTMENT_RENTED: puts("Hang on, we are renting you an apartment."); break; } } void rentApartment() { switch (state) { case FULLY_RENTED: puts("Sorry, we are fully rented."); break; case WAITING: puts("You have to submit an application."); break; case GOT_APPLICATION: puts("You must have your application checked."); break; case APARTMENT_RENTED: puts("Renting you an apartment..."); numberOfAppartments--; dispenseKeys(); break; } } void dispenseKeys() { switch (state) { case FULLY_RENTED: puts("Sorry, we are fully rented."); break; case WAITING: puts("You have to submit an application."); break; case GOT_APPLICATION: puts("You must have your application checked."); break; case APARTMENT_RENTED: puts("Here are your key!"); state = WAITING; break; } } }; void States_Run() { RentalMethods rentalMethods(9); rentalMethods.getApplication(); rentalMethods.checkApplication(); }
1
2
State Design Pattern 状态设计模式,布布扣,bubuko.com
原文:http://blog.csdn.net/kenden23/article/details/36415397