State

Stateパターンでは、状態を定数リテラルなどで表すのではなく、クラスとして表すようにする。

19.State パターン | TECHSCORE(テックスコア)

main.cppで、

定数リテラルだと、class_nostate_timezoneの中でif文が大量になり、分岐処理が大変だが、class_state_timezoneだとif文が無いのですっきりする。

$ vi main.cpp 
$ g++ -o main *.cpp
$ ls
afternoon_timezone.cpp      evening_timezone.h     nostate_timezone.cpp
afternoon_timezone.h        main                   nostate_timezone.h
daytime_timezone.cpp        main.cpp               rough_timezone.cpp
daytime_timezone.h          midnight_timezone.cpp  rough_timezone.h
detailed_timezone.cpp       midnight_timezone.h    state_timezone.cpp
detailed_timezone.h         morning_timezone.cpp   state_timezone.h
early_morning_timezone.cpp  morning_timezone.h     timezone.h
early_morning_timezone.h    night_timezone.cpp
evening_timezone.cpp        night_timezone.h
[h.miura@localhost state]$ ./main 
timezone->get_timezone_str(20) = afternoon
timezone->get_timezone_str(20) = night
timezone2->get_timezone_str(20) = afternoon
timezone3->get_timezone_str(20) = night
$

処理は変わらないが。

Sample/designpattern/state/state/src/state at master · bg1bgst333/Sample · GitHub