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