рдбреЗрд╡рд▓рдкрд░ рдХреА рд╕реЗрд╡рд╛ рдореЗрдВ рд╕рд░рд▓ рд░рд╛рдЬреНрдп рдорд╢реАрдиреЗрдВ

рдПрдХ рдкрд▓ рдХреЗ рд▓рд┐рдП рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреАред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЙрд╕рдХрд╛ рдирд╛рдо рд╡рд╛рд╕реНрдпрд╛ рд╣реИ рдФрд░ рдЙрд╕реЗ рд╡реЗрдмрд╕рд╛рдЗрдЯ / рдбреЗрд╕реНрдХрдЯреЙрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рдореЛрдмрд╛рдЗрд▓ рдРрдк рдкрд░ рдПрдХ рдПрдирд┐рдореЗрдЯреЗрдб рдореЗрдиреВ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред рддреБрдореНрд╣реЗрдВ рдкрддрд╛ рд╣реИ, рд╡реЗ рдКрдкрд░ рд╕реЗ рдиреАрдЪреЗ рддрдХ рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рд╡рд┐рдВрдбреЛрдЬ рд╡рд┐рдВрдбреЛ рджреНрд╡рд╛рд░рд╛ рдореЗрдиреВ рдпрд╛ рдУрдПрд╕ рдПрдХреНрд╕ рдкрд░ рдРрдкреНрдкрд▓ рдХреЗ рд╕рд╛рде рдореЗрдиреВред рдпрд╣рд╛рдВ рдпрд╣ рд╣реИред

рд╡рд╣ рдПрдХ рдбреНрд░реЙрдк-рдбрд╛рдЙрди рдмреЙрдХреНрд╕ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдПрдиреАрдореЗрд╢рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддрд╛ рд╣реИ, 100% рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╡рд╣ рдЬрд▓реНрдж рд╣реА рд╕рдордЭ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдореЗрдиреВ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЬрд╛рдирдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рдЕрднреА рдмрдВрдж рд╣реИ рдпрд╛ рдирд╣реАрдВред рд╣рдо рдпрд╣рд╛рдВ рдЕрдиреБрднрд╡реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╣реИрдВ, рд╣рдо рд╕рднреА рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рдПрдХ рдЭрдВрдбрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдХреЛрдИ рд╕рд╡рд╛рд▓ рдирд╣реАрдВ рд╣реИ, рдПрдХ рдЭрдВрдбрд╛ рд╣реИред

var opened = false; 

рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди, рдпрджрд┐ рдЖрдк рдЬрд▓реНрджреА рд╕реЗ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореЗрдиреВ рдХреЛ рдЕрдВрддрд┐рдо рд░реВрдк рджреЗрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЙрд╕рдХреЗ рдЦреБрд▓рдиреЗ рдФрд░ рдмрдВрдж рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкрд▓рдХ рдЭрдкрдХрдирд╛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд╛рд╕реНрдпрд╛ рдПрдХ рдПрдирд┐рдореЗрдЯреЗрдб рдзреНрд╡рдЬ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдЕрдм рдХреЛрдб рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

 var opened = false; var animating = false; function onClick(event) { if (animating) return; if (opened) close(); else open(); } 

рдХреБрдЫ рд╕рдордп рдмрд╛рдж, рд╡рд╕реНрдпрд╛ рдХреЛ рдмрддрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдореЗрдиреВ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрдВрдж рдФрд░ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреЛрдИ рд╕рд╡рд╛рд▓ рдирд╣реАрдВ! рд╣рдо рдпрд╣рд╛рдВ рдЕрдиреБрднрд╡реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╣реИрдВ, рд╣рдо рд╕рднреА рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ ... рдЖрдкрдХреЛ ANOTHER ONE FLAG рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛! рдФрд░, рд╡рд┐рдХрд╛рд╕ рдХреЗ рдХреБрдЫ рджрд┐рдиреЛрдВ рдХреЗ рдмрд╛рдж, рдореЗрдиреВ рдХреЛрдб рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбрдмрд▓-рд▓рд╛рдЗрди IFs рд╕реЗ рднрд░рд╛ рд╣реИ:

 if (enabled && opened && !animating && !selected && finishedTransition && !endOfTheWorld && ...) { ... } 

рд╡рд╛рд╕реНрдпрд╛ рд╕рд╡рд╛рд▓ рдкреВрдЫрдирд╛ рд╢реБрд░реВ рдХрд░рддреА рд╣реИрдВ: рдпрд╣ рдХреИрд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдПрдирд┐рдореЗрд╢рди == рд╕рдЪ рдФрд░ рд╕рдХреНрд╖рдо == рдЧрд▓рдд; рдХреНрдпреЛрдВ рд╕рдм рдХреБрдЫ рд╕рдордп-рд╕рдордп рдкрд░ рдЫреЛрдЯреА рдЧрд╛рдбрд╝реА рд╣реИ; рдЖрдк рдпрд╣ рднреА рдХреИрд╕реЗ рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдореЗрдиреВ рдХрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИ? рдЕрд╣рд╛! рд░рд╛рдЬреНрдпреЛрдВ ... рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдЧреЗ рдФрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред

рдЗрд╕ рд╡рд╛рд╕реНрдп рд╕реЗ рдорд┐рд▓реЛред



рд░рд╛рдЬреНрдп


рд╡рд╛рд╕реНрдпрд╛ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрд╣рд╕рд╛рд╕ рд╣реЛрдиреЗ рд▓рдЧрд╛ рд╣реИ рдХрд┐ рдЭрдВрдбреЗ рдХреЗ рдХрдИ рд╕рдВрдпреЛрдЬрди рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддреЗ рд╣реИрдВ, рдФрд░ рдмрд╛рдХреА рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╢рдмреНрджреЛрдВ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЗ рд╕рд╛рде рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: рдЕрдХреНрд╖рдо , рдирд┐рд╖реНрдХреНрд░рд┐рдп , рдПрдирд┐рдореЗрдЯреЗрдб , рдЦреЛрд▓рд╛ рд╣реБрдЖ ред рд╣рдо рд╕рднреА рдЕрдиреБрднрд╡реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╣реИрдВ, рд╣рдо рддреБрд░рдВрдд рд░рд╛рдЬреНрдп рдорд╢реАрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди, рд╡рд╛рд╕рдирд╛ рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрддрд╛рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдХреНрдпреЛрдВ рд╣реИред рд╕рд░рд▓ рднрд╛рд╖рд╛ рдореЗрдВ, рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЧрдгрд┐рддреАрдп рд╢рдмреНрдж рдХреЗред

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╡рд╕реНрддреБ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдкрд░реЛрдХреНрдд рдореЗрдиреВред рдПрдХ рд╡рд╕реНрддреБ рд╣рдореЗрд╢рд╛ рдПрдХ рд░рд╛рдЬреНрдп рдореЗрдВ рд╣реЛрддреА рд╣реИ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдШрдЯрдирд╛рдУрдВ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рдиреЗ рд╕реЗ рдЗрди рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдХреНрд░рдордг рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЖрдорддреМрд░ рдкрд░, рд░рд╛рдЬреНрдпреЛрдВ, рдШрдЯрдирд╛рдУрдВ рдФрд░ рд╕рдВрдХреНрд░рдордгреЛрдВ рдХреЛ рдРрд╕реА рдпреЛрдЬрдирд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдФрд░ рдЕрдВрддрд┐рдо рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рдордВрдбрд▓рд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ):



рдЖрд░реЗрдЦ рд╕реЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдЕрд╡рд╕реНрдерд╛ рд╕реЗ рд╕рдХреНрд░рд┐рдп рдореЗрдВ рдХреЗрд╡рд▓ рдЖрд░рдВрднрд┐рдХ рдШрдЯрдирд╛ рд╕реЗ рд╣реА рд╕рдВрднрд╡ рд╣реИ, рдФрд░ рд░реБрдХреА рд╣реБрдИ рд╕реНрдерд┐рддрд┐ рд╕реЗ рд╕рдХреНрд░рд┐рдп рдФрд░ рдирд┐рд╖реНрдХреНрд░рд┐рдп рджреЛрдиреЛрдВ рд╕реЗ рдорд┐рд▓рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рд╕рд░рд▓ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ "Finite State Machine" рдпрд╛ "Finite State Machine" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЖрдо рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдбрд░рд╛рд╡рдирд╛ рд╣реИред

рдУрдУрдкреА рд╡рд╛рдЪрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рд╡рд╕реНрддреБ рдХреЗ рдЕрдВрджрд░ рдЫрд┐рдкрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдХреЗрд╡рд▓ рдмрд╛рд╣рд░ рд╕реЗ рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдСрдкрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди 20 рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░рд╛рдЬреНрдп рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдмрд╛рд╣рд░реА рдПрдкреАрдЖрдИ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗрддрд╛ рд╣реИ "рдЖрдк рдХреИрд╕реЗ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?" рдЙрддреНрддрд░ " рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ" рдЬреИрд╕реЗ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ 19 рдФрд░ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рд╢рдкрде рд▓реЗрддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рдкреЙрд▓рд┐рдорд░ рд╡рд┐рдлрд▓ рд╣реЛ рдЧрдП рд╣реИрдВ ред

рд░рд╛рдЬреНрдп рдорд╢реАрдиреЛрдВ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рдмрд╛рдж, рдХреЛрдб рдХреЛ рд╕рдВрд░рдЪрдирд╛ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рд╣рдореЗрд╢рд╛ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдП рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рдФрд░ рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╣рдореЗрд╢рд╛ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдЧрд╛ рдХрд┐ рдЕрдЧрд░ рд╕рд┐рд╕реНрдЯрдо рдиреЗ рдЕрдЪрд╛рдирдХ рдЗрд╕ рд░рд╛рдЬреНрдп рд╕реЗ рджреБрд░реНрдЧрдо рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЬрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рддреЛ рдХреБрдЫ рдЧрд▓рдд рд╣реЛ рдЧрдпрд╛ред рдФрд░ рдЧрд▓рдд рд╕рдордп рдкрд░ рдЕрдЪрд╛рдирдХ рдЖрдиреЗ рдХреА рд╣рд┐рдореНрдордд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдбрд░ рд╕реЗ рдирд╣реАрдВ рдХрд┐ рдХреБрдЫ рдЯреВрдЯ рдЬрд╛рдПрдЧрд╛ред



рджреБрдирд┐рдпрд╛ рдХреА рд╕рдмрд╕реЗ рд╕рд░рд▓ рд░рд╛рдЬреНрдп рдорд╢реАрди


рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЕрдм рд╡рд╛рд╕рд╛ C # рдореЗрдВ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЙрд╕реЗ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд░рд╛рдЬреНрдп рдорд╢реАрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╡рд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
 private enum State { Disabled, Idle, Animating } private State state; void setState(State value) { state = value; switch (state) { case State.Disabled: ... case State.Idle: ... case State.Animating : ... break; } } 

рдФрд░ рдпрд╣ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдХреИрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ:
 void event1Handler() { switch (state) { case State.Idle: ... break; } } 

рд▓реЗрдХрд┐рди, рдпрд╣рд╛рдВ рд╣рдо рдЕрдиреБрднрд╡реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╣реИрдВ, рд╣рдо рд╕рднреА рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рд╕реЗрдЯрд╕реНрдЯреИрдЯ рдкрджреНрдзрддрд┐ рдЕрдВрддрддрдГ рджрд░реНрдЬрдиреЛрдВ рдкреГрд╖реНрдареЛрдВ рддрдХ рдмрдврд╝реЗрдЧреА, рдЬреЛ (рдкрд╛рдареНрдпрдкреБрд╕реНрддрдХреЛрдВ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ) рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред

рд░рд╛рдЬреНрдп рдХрд╛ рдкреИрдЯрд░реНрди


рдХреБрдЫ рдШрдВрдЯреЛрдВ рддрдХ рдЧреБрдЧрд▓реА рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╡рд╛рд╕рд┐рдпрд╛ рдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рд░рд╛рдЬреНрдп рдкреИрдЯрд░реНрди рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рдЕрдиреБрдХреВрд▓ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд░рд┐рд╖реНрда рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд▓рдЧрд╛рддрд╛рд░ рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдЕрдкрдиреЗ рдРрдк рдореЗрдВ рдЕрдзрд┐рдХ рдкреИрдЯрд░реНрди рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдПрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП, рд╡рд╛рд╕рд╛ рдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдкреИрдЯрд░реНрди рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪреАрдЬ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдЯреЗрдЯ рдкреИрдЯрд░реНрди рдХреЗ рд▓рд┐рдП, рдЖрдк IState рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:
 public interface IState { void Event1(); void Event2(); } 

рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд░рд╛рдЬреНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ рдЬреЛ рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпрд╣ рд╕реБрдВрджрд░ рдФрд░ рдкрд╛рдареНрдпрдкреБрд╕реНрддрдХ рдХрд╛ 100% рджрд┐рдЦрддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рд░ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рдЫреЛрдЯреА рд░рд╛рдЬреНрдп рдорд╢реАрди рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдмрд╣реБрдд рд╕рд╛рд░реА рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рддреЗрдЬрд╝ рдирд╣реАрдВ рд╣реИред рджреВрд╕рд░реЗ, рдЬрд▓реНрджреА рдпрд╛ рдмрд╛рдж рдореЗрдВ, рд╕рд╛рдЭрд╛ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдВрдЧреАред рдЙрдиреНрд╣реЗрдВ рдХрд╣рд╛рдБ рд╕реНрдЯреЛрд░ рдХрд░рдирд╛ рд╣реИ? рдореБрдЦреНрдп рд╡рд░реНрдЧ рдореЗрдВ? рдФрд░ рд░рд╛рдЬреНрдп рдХрдХреНрд╖рд╛рдПрдВ рдХреИрд╕реЗ рдЙрди рддрдХ рдкрд╣реБрдВрдЪреЗрдВрдЧреА? рдФрд░ рдореБрдЭреЗ рд╕рдордп рд╕реАрдорд╛ рд╕реЗ 15 рдорд┐рдирдЯ рдкрд╣рд▓реЗ рдирд┐рдпрдореЛрдВ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рдХреЗ рдПрдХ рдЫреЛрдЯрд╛ рд╣реИрдХ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреА рдмрд╛рддрдЪреАрдд рдХреА рд╕рдорд╕реНрдпрд╛рдПрдВ рдЬреЛ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдмрд╣реБрдд рдзреАрдорд╛ рдХрд░ рджреЗрдВрдЧреАред

рднрд╛рд╖рд╛ рдЖрдзрд╛рд░рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


рдХреБрдЫ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рд╕реЗ рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░реВрдмреА рдореЗрдВ, рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд░рд╛рдЬреНрдп рдорд╢реАрди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдкреВрд░реНрдг рдбреАрдПрд╕рдПрд▓ (рдФрд░ рдПрдХ рдирд╣реАрдВ) рд╣реИред рдФрд░ C # рдореЗрдВ, рдПрдХ рд░рд╛рдЬреНрдп рдорд╢реАрди рдХреЛ рдкрд░рд╛рд╡рд░реНрддрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреБрдЫ рдЗрд╕ рддрд░рд╣ :

  1. FiniteStateMachine рд╡рд░реНрдЧ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА ,
  2. StateName_eventName () рдирд╛рдордХ рд╡рд┐рдзрд┐рдпрд╛рдБ рдмрдирд╛рдПрдБ, рдЬрд┐рдиреНрд╣реЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд░рд╛рдЬреНрдп рдкрд░рд┐рд╡рд░реНрддрди рдФрд░ рдЗрд╡реЗрдВрдЯ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдкрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ

рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдХрдо рдХреЛрдб рд╣реИред

рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╡рд╛рд╕рд┐рдпрд╛ рд╕рдордЭрддреА рд╣реИ рдХрд┐ рдЙрд╕рдХреЗ рдкрд╛рд╕ рдкреНрд▓рд╕рд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ minuses рд╣реИрдВ:


рдврд╛рдВрдЪрд╛


рдЗрд╕ рдмреАрдЪ, рд╡рд╛рд╕рд┐рдпрд╛ рдиреЗ рд░рд╛рдЬреНрдп рдорд╢реАрдиреЛрдВ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ рддрд▓реНрд▓реАрди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рдФрд░ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ XML рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдкреАрдЖрдИ рдпрд╛ рдУрд╣ (рдорд╛рдИ рдЧреЙрдб) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЙрдирдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдЬреЛ рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИред рд╣рдо рдпрд╣рд╛рдВ рдЕрдиреБрднрд╡реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╣реИрдВ, рд╣рдо рд╕рднреА рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рдЕрдкрдиреА рд░реВрдкрд░реЗрдЦрд╛ рд▓рд┐рдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдп рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИрдВ , рдХреНрдпреЛрдВрдХрд┐ рдЙрди рд╕рднреА рдореЗрдВ рдПрдХ рдШрд╛рддрдХ рджреЛрд╖ рд╣реИ ред

рд╡рд╕рд╛рдпрд╛ рдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдЕрдкрдиреЗ рдврд╛рдВрдЪреЗ рдХреА рдорджрдж рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд┐рдирд╛ рдЬрд▓реНрджреА рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рд░рд╛рдЬреНрдп рдорд╢реАрди рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред рдлреНрд░реЗрдорд╡рд░реНрдХ рдбреЗрд╡рд▓рдкрд░ рдкрд░ рдХреЛрдИ рдкреНрд░рддрд┐рдмрдВрдз рдирд╣реАрдВ рд▓рдЧрд╛рдПрдЧрд╛ред рдЪрд╛рд░реЛрдВ рддрд░рдл рд╣рд░реНрд╖ рдФрд░ рдЙрд▓реНрд▓рд╛рд╕ рдЫрд╛ рдЬрд╛рдПрдЧрд╛ред

рдореИрдВрдиреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдХрдИ рд░реВрдкрд░реЗрдЦрд╛рдПрдБ рдЖрдЬрд╝рдорд╛рдИрдВ, рдореИрдВрдиреЗ рдХрдИ рд╕рдорд╛рди рдЦреБрдж рд▓рд┐рдЦреЗред рдФрд░ рд╣рдореЗрд╢рд╛, рдлреНрд░реЗрдорд╡рд░реНрдХ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдкрд░рд┐рдорд┐рдд рд░рд╛рдЬреНрдп рдорд╢реАрди рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рд╡реЗ рд╕рднреА рдХреБрдЫ рдкреНрд░рддрд┐рдмрдВрдз рд▓рдЧрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдХрдИ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдЗрддрдирд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд░рд╛рдЬреНрдп рдорд╢реАрди рдХреИрд╕реЗ рдмрдирд╛рдИ рдЬрд╛рдП, рдЖрдкрдХреЛ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдлрд╡рд╛рд╣ рдлреИрд▓рд╛рдиреА рд╣реЛрдЧреАред

рдпрд╣рд╛рдБ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдЯреЗрдЯрд▓реЗрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рджреНрд╡рд╛рд░рд╛ рдПрдХ рд╕реНрдЯреЗрдЯ рдорд╢реАрди рдХрд╛ рд╡рд┐рд╡рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
 var phoneCall = new StateMachine<State, Trigger>(State.OffHook); phoneCall.Configure(State.OffHook) .Permit(Trigger.CallDialed, State.Ringing); phoneCall.Configure(State.Ringing) .Permit(Trigger.HungUp, State.OffHook) .Permit(Trigger.CallConnected, State.Connected); phoneCall.Configure(State.Connected) .OnEntry(() => StartCallTimer()) .OnExit(() => StopCallTimer()) .Permit(Trigger.LeftMessage, State.OffHook) .Permit(Trigger.HungUp, State.OffHook) .Permit(Trigger.PlacedOnHold, State.OnHold); 

рд▓реЗрдХрд┐рди, рдПрдХ рд░рд╛рдЬреНрдп рдорд╢реАрди рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрдирд╛ рд░рд╛рд╕реНрддрд╛ рдмрдирд╛ рд▓реЗрдиреЗ рд╕реЗ, рдЖрдк рдЙрди рдЙрдкрдпреЛрдЧреА рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд▓рд╛рдн рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдврд╛рдВрдЪрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╣реИ: рд╕рдВрдХреНрд░рдордг рдХреА рд╢реБрджреНрдзрддрд╛ рдХреА рдЬрд╛рдВрдЪ, рдЖрд╢реНрд░рд┐рдд рд░рд╛рдЬреНрдп рдорд╢реАрдиреЛрдВ рдФрд░ рдЙрдк-рд░рд╛рдЬреНрдп рдорд╢реАрдиреЛрдВ рдХреЗ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдФрд░ рдореВрд░реНрдЦ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рд╕реБрд░рдХреНрд╖рд╛ред

рдПрдХреНрд╕рдПрдордПрд▓

рдПрдХреНрд╕рдПрдордПрд▓ рдПрдХ рдЕрд▓рдЧ рдмреБрд░рд╛рдИ рд╣реИред рдХрд┐рд╕реА рдиреЗ рдПрдХ рдмрд╛рд░ рд╡рд┐рдиреНрдпрд╛рд╕ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ рдерд╛ред рдЬрд╛рд╡рд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдиреАрдВрдмреВ рдХреЗ рдЭреБрдВрдб рдиреЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЙрд╕рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░реНрдердирд╛ рдХреАред рдФрд░ рдЕрдм рдХреЛрдИ рднреА рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рд╣рд░ рдХреЛрдИ рдПрдХреНрд╕рдПрдордПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗ рд╣рд░ рдЙрд╕ рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд╣рд░рд╛рддреЗ рд░рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ ред

рд╡рд╛рд╕реНрдпрд╛ рдХреЛ рдпрд╣ рднреА рд╡рд┐рдЪрд╛рд░ рдЖрдпрд╛ рдХрд┐ рдЖрдк XML рдореЗрдВ рд╕рдм рдХреБрдЫ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреЛрдб рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЛ рдЧрд▓рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ! рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЗрд╕рдХреЗ рдврд╛рдВрдЪреЗ рдореЗрдВ рдЕрд▓рдЧ рд╕реЗ рд▓рдЧрднрдЧ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреА XML рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ:
 <fsm name="Vending Machine"> <states> <state name="start"> <transition input="nickel" next="five" /> <transition input="dime" next="ten" /> <transition input="quarter" next="start" action="dispense" /> </state> <state name="five"> <transition input="nickel" next="ten" /> <transition input="dime" next="fifteen" /> <transition input="quarter" next="start" action="dispense" /> </state> <state name="ten"> <transition input="nickel" next="fifteen" /> <transition input="dime" next="twenty" /> <transition input="quarter" next="start" action="dispense" /> </state> ... </states> </fsm> 

рдХреНрд▓рд╛рд╕! рдФрд░ рдХреЛрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдирд╣реАрдВред рд▓реЗрдХрд┐рди, рдпрд╣рд╛рдВ рд╣рдо рдЕрдиреБрднрд╡реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╣реИрдВ, рд╣рдо рд╕рднреА рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╣реАрдВ рдирд╣реАрдВ рдЧрдИ рд╣реИред рд╡рд╛рд╕реНрдпрд╛ рдиреЗ рдШреЛрд╖рдгрд╛рддреНрдордХ рдХреЛрдб рдХреЗ рдПрдХ рдЯреБрдХрдбрд╝реЗ рдХреЗ рд╕рд╛рде рдкреЗрд░рд╛рдореЗрдкреНрдЯрд░реА рдХреЛрдб рдХреЗ рдПрдХ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛, рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдПрдХреНрд╕рдПрдордПрд▓ рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЛ рдЬреЛрдбрд╝рд╛, рдЬреЛ рдЕрднреА рднреА рдЗрд╕реЗ рдПрдХ-рджреЛ рдмрд╛рд░ рдЬрдЯрд┐рд▓ рдХрд░рддрд╛ рд╣реИред рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдЬрдм рдХреЛрдб рдЕрд▓рдЧ-рдЕрд▓рдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╣реЛ рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдмрд┐рдЦрд░реЗ рд╣реБрдП рд╣реЛрдВред

рд╕рдордЭреМрддрд╛


рдФрд░ рдлрд┐рд░ рд╡рд╛рд╕рд┐рдпрд╛ рдЗрд╕ рд╕рдм рд╕реЗ рдердХ рдЧрдИ рдФрд░ рд╡рд╣ рд╡рд╛рдкрд╕ рджреБрдирд┐рдпрд╛ рдХреА рд╕рдмрд╕реЗ рд╕рд░рд▓ рд░рд╛рдЬреНрдп рдорд╢реАрди рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЧрдИред рдЙрдиреНрд╣реЛрдВрдиреЗ рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рднреБрдирд╛рдпрд╛ рдФрд░ рдЗрд╕рдореЗрдВ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдо рдмрдирд╛рдПред

рдЕрджреНрдпрддрди: рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреА рдХрдореА рдереАред

рд╣рдорд╛рд░реЗ рдХрдИ рд░рд╛рдЬреНрдп рд╣реИрдВред рдЙрдирдХреЗ рдмреАрдЪ рд╕рдВрдХреНрд░рдордг рдкрд░рдорд╛рдгреБ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдПрдХ рд▓реЗрди-рджреЗрди рд╣реИ, рдЕрд░реНрдерд╛рдд, рд╡реЗ рд╣рдореЗрд╢рд╛ рдПрдХ рд╕рд╛рде рд╕рд╣реА рдХреНрд░рдо рдореЗрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рдХреЛрдб рдЙрдирдХреЗ рдмреАрдЪ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЬрдм рд░рд╛рдЬреНрдп рдП рд╕реЗ рдмреА рдореЗрдВ рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ рдирд┐рдореНрди рд╣реЛрддрд╛ рд╣реИ: рд░рд╛рдЬреНрдп рдП рд╕реЗ рдирд┐рдХрд╛рд╕ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИ, рд░рд╛рдЬреНрдп рдП рд╕реЗ рдмреА рдореЗрдВ рдмрджрд▓рддрд╛ рд╣реИ, рд░рд╛рдЬреНрдп рдмреА рдХреЗ рд▓рд┐рдП рдкреНрд░рд╡реЗрд╢ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИред

рд░рд╛рдЬреНрдп A рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ StateA рдкрджреНрдзрддрд┐ рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рд▓реЙрдЬрд┐рдХ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧрд╛ рдФрд░ setState (A) рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ред рдЕрдкрдиреЗ рдЖрдк рдХреЛ setState (A) рдХреЙрд▓ рдХрд░рдирд╛ рдЕрддреНрдпрдзрд┐рдХ рд╣рддреЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рдХрд▓рд╛:

 /** *    enum   ,     enums. */ private enum State { Disabled, Idle, Animating } /** *    . ,         . */ private State state; /** *         state< >(). *                . *    setState(newValue)     . */ void stateDisabled() { switch (state) { case State.Idle: break; } setState(State.Disabled); // State Disabled enter logic } /** *       . * stateIdle(0); */ void stateIdle(int data) { setState(State.Idle); // State Idle enter logic } void stateAnimating() { setState(State.Animating); // State Animating enter logic } /** *  setState    * state = value; *   prevState = state;     . * ,         . */ void setState(State value) { switch ( state ) { case State.Animating: // state Animating exit logic break; // other states } state = value; } /** *     ,     . */ void event1Handler() { switch (state) { case State.Idle: // state Idle logic break; // other states } } 

UPDATE: setState () рдореЗрдВ, рдХрд┐рд╕реА рд░рд╛рдЬреНрдп рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рддрд░реНрдХ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ StateB () рдореЗрдВ рд░рд╛рдЬреНрдп рдП рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рддрд░реНрдХ рд╕рдВрднрд╡ рд╣реИ, рдЬрдм рдмреА рдкрд░ рдЬрд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд╣реБрдд рдХрдо рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд░рд╛рдЬреНрдп рдорд╢реАрдиреЛрдВ рдХреЗ рд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕рдореНрдореЗрд▓рдиред рдпрд╣ рдХрд╛рдлреА рд▓рдЪреАрд▓рд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╛рдпрджреЗ рд╣реИрдВ:


рдПрдХ рдФрд░ рдЧреИрд░-рд╕реНрдкрд╖реНрдЯ рд▓рд╛рдн рднрд╛рд╖рд╛ рд╕реЗ рд╕рдордЭреМрддреЗ рдХреА рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рд╣реИред рдПрдХ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╕реЗ рджреВрд╕рд░реЗ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рдЬрд╛рдиреЗ рдкрд░, рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рдврд╛рдВрдЪреЗ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рднрд╛рд╖рд╛ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдирд╣реАрдВ рдкрдбрд╝реЗрдЧрд╛ рдпрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреА рд╣реЛрдЧреАред

рд╕рднреА рд╕рдордЭреМрддреЛрдВ рдХреА рддрд░рд╣, рдХреБрдЫ рдХреЛрдб рдкрд╣рд▓реЗ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЗрд╕рдХрд╛ рдПрдХ рдЕрд▓рдЧ рдЕрд░реНрде рд╣реЛрдЧрд╛, рдпрд╛ рдпрд╣ рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдирдХрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдлрд┐рд░ рд╣рдо рдЗрд╕реЗ рджреВрд╕рд░реА рдЬрдЧрд╣ рд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдХреЛрдИ рдордирд╛ рдирд╣реАрдВ рдХрд░рддрд╛ред рдлрд┐рд░ рднреА, рдХреЛрдб рдХреЛ рдкрддреНрдерд░ рд╕реЗ рдирд╣реАрдВ рдЙрдХреЗрд░рд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рд╕рд┐рд░реНрдл рдкрд╛рда рд╣реИ (рдбрд░рд╛рд╡рдиреА!) рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕рд╛рде рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЕрджреНрдпрддрди: рдФрд░ setState () рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдПрдХ рд╕реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖


рдпрд╣ рд░рд╛рдЬреНрдп рдорд╢реАрдиреЛрдВ рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╡рд╛рд╕рд┐рдпрд╛ рдХреЗ рдЖрдХрд░реНрд╖рдХ рд╕рд╛рд╣рд╕рд┐рдХ рдХрд╛рд░реНрдп рдХрд╛ рд╕рдорд╛рдкрди рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрднреА рднреА рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред рдПрдХ рдЕрд▓рдЧ рд╡рд┐рд╖рдп рдХреЗрд╡рд▓ рд╕рдорд╛рдирд╛рдВрддрд░ рдФрд░ рдирд┐рд░реНрднрд░ рд░рд╛рдЬреНрдп рдорд╢реАрдиреЛрдВ рдХреЗ рд▓рд╛рдпрдХ рд╣реЛрдЧрд╛ред

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЖрдк рдЕрднреА рддрдХ рд╣рд░ рдЬрдЧрд╣ рд░рд╛рдЬреНрдп рдорд╢реАрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд▓реЗрдЦ рдЖрдкрдХреЛ рдЕрдЪреНрдЫреЗ рдХреА рддрд░рдл рдЦреАрдВрдЪреЗрдЧрд╛; рдпрджрд┐ рдЖрдк рд░рд╛рдЬреНрдп рдорд╢реАрдиреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ uberframework рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЖрдкрдХреЛ рдирдП рд╕рд┐рд░реЗ рд╕реЗ рджреЗрдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд▓реЗрдЦ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдпрд╣ рд╕реЛрдЪрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ рдХрд┐ рдкреИрдЯрд░реНрди рдФрд░ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╣рд╛рдВ рдФрд░ рдХрдм рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдпрд╣ рдХрд┐ рд░рд╛рдЬреНрдп рдорд╢реАрдиреЛрдВ рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдкрд░ рд╡рд░реНрдгрд┐рдд рд╕рдордЭреМрддрд╛ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╕рд╛рдмрд┐рдд рд╣реЛрдЧрд╛ред

Source: https://habr.com/ru/post/In160105/


All Articles