finish step 1
finish step 2
finish step 3
finish step 4
finish step 5
finish step 6
refactor:Move Acc to State and use subclass to remove if.