
рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдФрд░ рдСрдЯреЛрдореЗрдЯрд╛ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рд╕реЗ, рдПрдХ
рдкрд░рд┐рдорд┐рдд рд░рд╛рдЬреНрдп рдорд╢реАрди рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛
рдХреЛ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рдПрдХ рдкрд░рд┐рдорд┐рдд рд╕реЗрдЯ рдФрд░ рдЗрди рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдХреНрд░рдордг рд╢реБрд░реВ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдШрдЯрдирд╛рдУрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдПрдХ рд╕рд╛рд░ рдореЙрдбрд▓ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдЖрдзрд╛рд░ рдкрд░,
рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рдПрдХ рдХрд╛рдлреА рд╡реНрдпрд╛рдкрдХ рдкреНрд░рддрд┐рдорд╛рди рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкрд░рд┐рдорд┐рдд рдСрдЯреЛрдореЗрдЯрд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдЕрд░реНрдерд╛рддред рд░рд╛рдЬреНрдпреЛрдВ рдФрд░ рдШрдЯрдирд╛рдУрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВред рд╕реНрдкрд╖реНрдЯ рд░реВрдк рдореЗрдВ, рдпрд╣ рдкреНрд░рддрд┐рдорд╛рди рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдм рд▓реЗрдХрд░реНрд╕ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╣реЛрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрдк рдЗрд╕ рдкреНрд░рддрд┐рдорд╛рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рд▓реЗрдЦ рдореЗрдВ рд░рд╛рдЬреНрдп рдорд╢реАрди рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп
рд╡рд┐рдЬрд╝рд┐рдЯрд░ / рдбрдмрд▓ рдбрд┐рд╕реНрдкреИрдЪ рдФрд░
рд╕реНрдЯреЗрдЯ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд▓реЗрдЦ
рдХреЛ рд╣рдмреНрд░рд╣рд╛рдмреНрд░ рдкрд░ рдбрд┐рдЬрд╛рдЗрди рдкреИрдЯрд░реНрди рдкрд░ рдкреНрд░рдХрд╛рд╢рдиреЛрдВ рдХреА
рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреА рдирд┐рд░рдВрддрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдкреНрд░реЗрд░рдгрд╛
рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рд▓рдЪреАрд▓рд╛ рдЙрдкрдХрд░рдг рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд╡рд┐рд╖рдп рдХреНрд╖реЗрддреНрд░ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЗ рдХрд░реАрдм рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдмрд╣реБ-рдордВрдЬрд┐рд▓рд╛ рдЗрдорд╛рд░рдд рдореЗрдВ рд▓рд┐рдлреНрдЯ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдорд╢реАрди рдХреЗ рдПрдХ рдмрд╣реБрдд рд╣реА рдФрдкрдЪрд╛рд░рд┐рдХ рдореЙрдбрд▓ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ: "рд▓рд┐рдлреНрдЯ рдКрдкрд░ рдЬрд╛рддреА рд╣реИ", "рд▓рд┐рдлреНрдЯ рдиреАрдЪреЗ рдЬрд╛рддреА рд╣реИ", "рд▓рд┐рдлреНрдЯ рдлрд░реНрд╢ N рдкрд░ рдЦрдбрд╝реА рд╣реЛрддреА рд╣реИ" рдФрд░ рдШрд░ рдХреЗ рдирд┐рд╡рд╛рд╕рд┐рдпреЛрдВ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реА рдШрдЯрдирд╛рдПрдВ: "рдбрд╛рдЙрди рдмрдЯрди рджрдмрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред N-th рдлреНрд▓реЛрд░ рдкрд░ "рдФрд░" Up рдмрдЯрди рдХреЛ N-th рдлреНрд▓реЛрд░ рдкрд░ рджрдмрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕реНрдкрд╖реНрдЯ рд▓рд╛рднреЛрдВ рдХреЗ рд╕рд╛рде, рдПрдХ рдЫреЛрдЯреА рд╕реА рдЦрд╛рдореА рд╣реИ - рдРрд╕реА рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдХреЛрдбрд┐рдВрдЧ рдПрдХ рдмрд╣реБрдд рд╣реА рдЕрдкреНрд░рд┐рдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╢рд╛рдЦрд╛рдУрдВ рдФрд░ рд╕рдВрдХреНрд░рдордгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИред
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, OOP рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдЖрдЧрдВрддреБрдХ рдФрд░ рд░рд╛рдЬреНрдп рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдорд╕реНрдпрд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдЗрд╕реЗ рджреЛ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рдореЛрдбреНрд╕ - "рд░реЗрдбрд┐рдпреЛ" рдФрд░ "рд╕реАрдбреА рдкреНрд▓реЗрдпрд░" рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓реА рдПрдХ рдЖрджрд┐рдо рдХрд╛рд░ рд░реЗрдбрд┐рдпреЛ рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдирд┐рдпрдВрддреНрд░рдг рдХрдХреНрд╖ рдкрд░ рдЯреЙрдЧрд▓ рд╕реНрд╡рд┐рдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЛрдб рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЖрдВрдХрдбрд╝рд╛ рджреЗрдЦреЗрдВ)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд░реЗрдбрд┐рдпреЛ рд╕реЗрдЯ рдореЛрдб рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд░реЗрдбрд┐рдпреЛ рд╕реНрдЯреЗрд╢рдиреЛрдВ рдпрд╛ рдкрдЯрд░рд┐рдпреЛрдВ ("рдЕрдЧрд▓рд╛" рдмрдЯрди) рдХреЗ рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рддрдВрддреНрд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред
рдиреЗрд╕реНрдЯреЗрдб рд╕реА рд╢рд╛рдЦрд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг
рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХреНрд╖реЗрддреНрд░ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
switch( state ) { case RADIO: switch(event) { case mode: state = CD; break; case next: stationNumber++; break; } break; case CD: switch(event) { case mode: state = RADIO; break; case next: trackNumber++; break; } break; }
рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдХреЛрдб рдмрд┐рд▓реНрдХреБрд▓ рдкрдардиреАрдп рдирд╣реАрдВ рд╣реИ рдФрд░ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд▓рд┐рдП рдХрдард┐рди рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдирдпрд╛ рд░рд╛рдЬреНрдп рдпрд╛ рдИрд╡реЗрдВрдЯ рдЬреЛрдбрд╝рдирд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рдордп рд▓реЗрдиреЗ рд╡рд╛рд▓рд╛ рдСрдкрд░реЗрд╢рди рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдХреЛрдб рдХреЗ рд╕рдВрд╢реЛрдзрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ
рд╕реНрдкреЗрдЧреЗрдЯреА рдХреЛрдб рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдХреБрдЫ рд╡рд░реНрдЧреЛрдВ рдХреА рдирдХрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдХрд╕рд╛рддрд╛ рд╣реИ (рдПрдХ рд╕реНрдерд┐рддрд┐ рд╕рдВрднрд╡ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд░рд╛рдЬреНрдпреЛрдВ рдореЗрдВ рдПрдХ рд╣реА рдШрдЯрдирд╛ рдХреЛ рдЙрд╕реА рддрд░рд╣ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП)ред
рд╡рд┐рдЬрд╝рд┐рдЯрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ
рдбрдмрд▓ рдбрд┐рд╕реНрдкреИрдЪ рдХреЛ рд░рд╛рдЬреНрдп рдФрд░ рд╣реИрдВрдбрд▓рд░ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдХреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЙрд╕реА рд╕рдордп, рдЗрд╡реЗрдВрдЯ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЕрдВрддрд┐рдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдЪреБрдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рджреЛ рдХрд╛рд░рдХреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░: рдШрдЯрдирд╛ рдХрд╛ рдкреНрд░рдХрд╛рд░ рдФрд░ рд╣реИрдВрдбрд▓рд░ рдХрд╛ рдкреНрд░рдХрд╛рд░ (рдЗрд╕рд▓рд┐рдП рдирд╛рдо "рдбрдмрд▓ рдбрд┐рд╕реНрдкреИрдЪ")ред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдПрдХ рдирдП рдкреНрд░рдХрд╛рд░ рдХреЗ рдИрд╡реЗрдВрдЯ рдпрд╛ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╡рд░реНрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдХреНрд░рдорд╢рдГ "рдЗрд╡реЗрдВрдЯ" рдпрд╛ "рд╣реИрдВрдбрд▓рд░" рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╡рд╛рд░рд┐рд╕ред
рд╡рд░реНрдЧ рдЖрд░реЗрдЦ
рд╕рд┐рд╕реНрдЯрдо рдХреА рдореБрдЦреНрдп рдЗрдХрд╛рдЗрдпрд╛рдБ:
- рдЧреНрд░рд╛рдореЛрдлреЛрди - рд░реЗрдбрд┐рдпреЛ, рдЬреЛ рдЪрд╛рд▓реВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ - рд╕рдХреНрд╖рдо (), рдмрдВрдж рдХрд░реЗрдВ - рдЕрдХреНрд╖рдо рдХрд░реЗрдВ () рдФрд░ рдИрд╡реЗрдВрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ - рдкреНрд░реЗрд╖рдг (рдИрд╡реЗрдВрдЯ);
- рдЧреНрд░рд╛рдореЛрдлреЛрдирдЗрд╡реЗрдВрдЯ - рдПрдХ рдПрдХрд▓ рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рд╕рдВрднрд╛рд╡рд┐рдд рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ - рд╣реИрдВрдбрд▓рд░ рдХреЛ "рд▓рд╛рдЧреВ рдХрд░реЗрдВ" рдШрдЯрдирд╛ рдХреЗ рд▓рд┐рдП;
- рдЧреНрд░рд╛рдореЛрдлреЛрдирд╣реИрдВрдбрд▓рд░ - рдПрдХ рд╣реИрдВрдбрд▓рд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЬрд┐рд╕рдореЗрдВ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдореМрдЬреВрдж рд╕рднреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреЙрд▓реАрдореЙрд░реНрдлрд┐рдХ рддрд░реАрдХреЗ (рд╣реИрдВрдбрд▓) рд╣реЛрддреЗ рд╣реИрдВ;

рдЗрд╕ рдЖрд░реЗрдЦ рдореЗрдВ рд╕рдмрд╕реЗ рдмрдбрд╝реА рд░реБрдЪрд┐ рдЧреНрд░рд╛рдореЛрдлреЛрдирд╣реИрдВрдбрд▓рд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ, рдЬреЛ рд╡рд┐рдЬрд╝рд┐рдЯрд░ рд╕рдВрд░рдЪрдирд╛ (рдЖрдЧрдВрддреБрдХ рдХреЗ рд░реВрдк рдореЗрдВ) рдФрд░ рд╕реНрд╡-рдирд┐рд╣рд┐рдд рд░рд╛рдЬреНрдп рд╕рдВрд░рдЪрдирд╛ (рдЧреНрд░рд╛рдореЛрдлреЛрди рдХреЗ рд▓рд┐рдП рд░рд╛рдЬреНрдп рдХреЗ рд░реВрдк рдореЗрдВ) рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдпрд╛рдиреА рд╣рдо рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджреЛ рдкреИрдЯрд░реНрди рдХреА рдПрдХ рддрд░рд╣ рдХреА рд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:
public static void main(String args[]) { Gramophone gramophone = new Gramophone();
рд╣рдо рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдЖрдиреЗ рд╡рд╛рд▓реА рдмрд╛рд╣рд░реА рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред
interface GramophoneEvent { void apply(GramophoneHandler handler); } class ToogleEvent implements GramophoneEvent { @Override public void apply(GramophoneHandler handler) { handler.handle(this); } } class NextEvent implements GramophoneEvent { @Override public void apply(GramophoneHandler handler) { handler.handle(this); } }
рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рдореЗрдВ, рд▓рд╛рдЧреВ () рд╡рд┐рдзрд┐ рдореЗрдВ рд╕рднреА рд╡рдВрд╢рдЬреЛрдВ рдореЗрдВ рд╕рдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рдпрд╣ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рд╣реИ - рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдШрдЯрдирд╛ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреА рдПрдХ рдмрд╣реБрд░реВрдкреА рдкрд░рд┐рднрд╛рд╖рд╛ред рдпрд╛рдиреА рд╣реИрдВрдбрд▓ () рд╡рд┐рдзрд┐ рдХреЛ рд╣реИрдВрдбрд▓рд░ рдкрд░ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдпрд╣ рдШрдЯрдирд╛ рдХреЗ рдкреНрд░рдХрд╛рд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ (рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рд▓рд┐рдВрдХ)ред
рдРрд╕реА рднрд╛рд╖рд╛рдПрдВ рдЬреЛ рдмрд╣реБрджреЗрд╡рд╡рд╛рдж рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреА рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ), рдЖрдк рд╡рд┐рдзрд┐ рдирд╛рдо рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдШрдЯрдирд╛ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрд▓рдЧреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдлрд┐рд░ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рддрд░реАрдХреЗ handleNext (рдЗрд╡реЗрдВрдЯ) рдФрд░ handleToogle (рдИрд╡реЗрдВрдЯ) рдФрд░ рдХреЙрд▓рд┐рдВрдЧ рдХреЛрдб рдЬреИрд╕реЗ рджрд┐рдЦреЗрдВрдЧреЗ:
var NextEvent = function() { this.apply = function(handler) { handler.handleNext(this); } }
рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рд░рд╛рдЬреНрдпреЛрдВ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд░рд╛рдЬреНрдп = рд╣реИрдВрдбрд▓рд░ред
interface GramophoneHandler { void handle(ToogleEvent event); void handle(NextEvent event); } class RadioHandler implements GramophoneHandler { private Gramophone gramophone; public RadioHandler(Gramophone gramophone) { this.gramophone = gramophone; } @Override public void handle(ToogleEvent event) { gramophone.toogle(new CDHandler(gramophone)); } @Override public void handle(NextEvent event) { gramophone.nextStation(); } } class CDHandler implements GramophoneHandler { private Gramophone gramophone; public CDHandler(Gramophone gramophone) { this.gramophone = gramophone; } @Override public void handle(ToogleEvent event) { gramophone.toogle(new RadioHandler(gramophone)); } @Override public void handle(NextEvent event) { gramophone.nextTrack(); } }
рдЕрдВрдд рдореЗрдВ, рд╣рдо рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдореБрдЦреНрдп рд╡рд░реНрдЧ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ - рд░реЗрдбрд┐рдпреЛ (рдЧреНрд░рд╛рдореЛрдлреЛрди)ред
class Gramophone implements Runnable { private GramophoneHandler handler = new CDHandler(this); private Queue<GramophoneEvent> pool = new LinkedList<GramophoneEvent>(); private Thread self = new Thread(this); private int track = 0, station = 0; private boolean started = false; public void enable() { started = true; self.start(); } public void disable() { started = false; self.interrupt(); try { self.join(); } catch (InterruptedException ignored) { } } public synchronized void dispatch(GramophoneEvent event) { pool.offer(event); notify(); } @Override public void run() { for (;!pool.isEmpty() || started;) { for (;!pool.isEmpty();) { GramophoneEvent event = pool.poll(); event.apply(handler); } synchronized (this) { try { wait(); } catch (InterruptedException ignored) { } } } } void toogle(GramophoneHandler handler) { this.handler = handler; System.out.println("State changed: " + handler.getClass().getSimpleName()); } void nextTrack() { track++; System.out.println("Track changed: " + track); } void nextStation() { station++; System.out.println("Station changed: " + station); } }
рдЙрдкрд░реЛрдХреНрдд рдХреНрд░рд┐рдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдЯреЙрдЧрд▓ (), рдиреЗрдХреНрд╕реНрдЯрдЯреНрд░реИрдХ (), рдФрд░ рдиреЗрдХреНрд╕реНрдЯрд╣реИрдо () рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдХреЗрд╡рд▓ рдкреИрдХреЗрдЬ рдХреЗ рдЕрдВрджрд░ рдЧреБрдВрдЬрд╛рдЗрд╢ рд╣реИред рдпрд╣ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд╕реАрдзреЗ рдмрд╛рд╣рд░реА рдХреЙрд▓ рд╕реЗ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░рдг рдХреА рдзрд╛рд░рд╛ рдХреА рдкреНрд░рдХреГрддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдзрд┐ рдореЗрдВ рдирд┐рдореНрди рд╕рддреНрдпрд╛рдкрди рдХреЛрдб рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
void nextTrack() { if (Thread.currentThread() != self) { throw new RuntimeException(тАЬIllegal threadтАЭ); } track++; System.out.println("Track changed: " + track); }
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЛ рд░рди () рд╡рд┐рдзрд┐ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ
рдИрд╡реЗрдВрдЯ рд▓реВрдк рдореБрд╣рд╛рд╡рд░реЗ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╡рд┐рдзрд┐ рдореЗрдВ рджреЛ рдиреЗрд╕реНрдЯреЗрдб рд▓реВрдк рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХрддрд╛рд░ рдореЗрдВ рдШрдЯрдирд╛рдУрдВ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ рдзрд╛рд░рд╛ рд╕реЛ рдЬрд╛рддреА рд╣реИред рдЗрд╕реА рд╕рдордп, рдкреНрд░рддреНрдпреЗрдХ рдирдИ рдШрдЯрдирд╛ рдХреЛ рдХрддрд╛рд░ рдореЗрдВ рдЬреЛрдбрд╝рдХрд░ (рдкреНрд░реЗрд╖рдг () рд╡рд┐рдзрд┐ рджреЗрдЦреЗрдВ) рдпрд╣ рдЬрд╛рдЧрддрд╛ рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖
рд▓реЗрдЦ рдУрдУрдкреА рдФрд░ рдбрд┐рдЬрд╛рдЗрди рдкреИрдЯрд░реНрди рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рдкреНрд░рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрди рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХреЛрдб
GitHub рдкрд░ рдЙрдкрд▓рдмреНрдз
рд╣реИ ред рд╡рд╣рд╛рдВ рдЖрдк
рдЕрдиреНрдп рдкреИрдЯрд░реНрдиреЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рд╣реИрдмрд░рд╣рд╛рдм рдкрд░ рдкрд╣рд▓реЗ рд╣реА
рдХрдИ рд▓реЗрдЦ рд▓рд┐рдЦреЗ рдЬрд╛ рдЪреБрдХреЗ рд╣реИрдВред