CodeGym/Java Blog/рдЕрдирд┐рдпрдорд┐рдд/рд╡рд┐рд░реЛрдзреА рдкреИрдЯрд░реНрди рдХреНрдпрд╛ рд╣реИрдВ? рдЖрдЗрдП рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ (рднрд╛рдЧ 1)
John Squirrels
рд╕реНрддрд░ 41
San Francisco

рд╡рд┐рд░реЛрдзреА рдкреИрдЯрд░реНрди рдХреНрдпрд╛ рд╣реИрдВ? рдЖрдЗрдП рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ (рднрд╛рдЧ 1)

рдЕрдирд┐рдпрдорд┐рдд рдЧреНрд░реБрдк рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд
рд╕рджрд╕реНрдп
рд╕рдмрдХреЗ рд▓рд┐рдП рджрд┐рди рдЕрдЪреНрдЫрд╛ рд╣реЛ! рджреВрд╕рд░реЗ рджрд┐рди рдореЗрд░рд╛ рдЬреЙрдм рдЗрдВрдЯрд░рд╡реНрдпреВ рдерд╛, рдФрд░ рдореБрдЭрд╕реЗ рдПрдВрдЯреА-рдкреИрдЯрд░реНрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╕рд╡рд╛рд▓ рдкреВрдЫреЗ рдЧрдП: рд╡реЗ рдХреНрдпрд╛ рд╣реИрдВ, рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реИрдВ, рдФрд░ рдХреМрди рд╕реЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВред рдмреЗрд╢рдХ, рдореИрдВрдиреЗ рд╕рд╡рд╛рд▓ рдХрд╛ рдЬрд╡рд╛рдм рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рд╣реА рд╕рддрд╣реА рддреМрд░ рдкрд░, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЗрд╕ рд╡рд┐рд╖рдп рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдирд╣реАрдВ рдбрд╛рд▓рд╛ рдерд╛ред рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЗрдВрдЯрд░рдиреЗрдЯ рдЦрдВрдЧрд╛рд▓рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдФрд░ рд╡рд┐рд╖рдп рдореЗрдВ рдЦреБрдж рдХреЛ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдбреБрдмреЛ рджрд┐рдпрд╛ред рд╡рд┐рд░реЛрдзреА рдкреИрдЯрд░реНрди рдХреНрдпрд╛ рд╣реИрдВ?  рдЖрдЗрдП рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ (рднрд╛рдЧ 1) - 1 рдЖрдЬ рдореИрдВ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдПрдВрдЯреА-рдкреИрдЯрд░реНрди рдХрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдг рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕реЗ рдкрдврд╝рдиреЗ рд╕реЗ рдЖрдкрдХреЛ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдЬреНрдЮрд╛рди рдорд┐рд▓реЗрдЧрд╛ред рдЖрдПрдБ рд╢реБрд░реВ рдХрд░реЗрдВ! рдПрдВрдЯреА-рдкреИрдЯрд░реНрди рдХреНрдпрд╛ рд╣реИ, рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рдпрд╛рдж рдХрд░реЗрдВ рдХрд┐ рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рдХреНрдпрд╛ рд╣реИред рдПрдХ рдбрд┐рдЬрд╛рдЗрди рдкреИрдЯрд░реНрдирдХрд┐рд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░рддреЗ рд╕рдордп рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╕реНрдпрд╛рдУрдВ рдпрд╛ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рджреЛрд╣рд░рд╛рдП рдЬрд╛рдиреЗ рдпреЛрдЧреНрдп рд╡рд╛рд╕реНрддреБ рд╕рдорд╛рдзрд╛рди рд╣реИред рд▓реЗрдХрд┐рди рдЖрдЬ рд╣рдо рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдЙрдирдХреЗ рд╡рд┐рдкрд░реАрдд-рдкреНрд░рддрд┐рд░реВрдкреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЖрдо рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдПрдХ рд╡рд░реНрдЧ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд░реЛрдзреА рдкреИрдЯрд░реНрди рдПрдХ рд╡реНрдпрд╛рдкрдХ рд▓реЗрдХрд┐рди рдЕрдкреНрд░рднрд╛рд╡реА, рдЬреЛрдЦрд┐рдо рднрд░рд╛ рдФрд░ / рдпрд╛ рдЕрдиреБрддреНрдкрд╛рджрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдпрд╣ рдЧрд▓рддрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдкреИрдЯрд░реНрди рд╣реИ (рдЬрд┐рд╕реЗ рдХрднреА-рдХрднреА рдЯреНрд░реИрдк рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рд╡рд┐рд░реЛрдзреА рдкреИрдЯрд░реНрди рдирд┐рдореНрди рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ:
  1. рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд▓ рдПрдВрдЯреА-рдкреИрдЯрд░реНрди - рдпреЗ рдПрдВрдЯреА-рдкреИрдЯрд░реНрди рдПрдХ рд╕рд┐рд╕реНрдЯрдо рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВ (рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЯ рджреНрд╡рд╛рд░рд╛)ред
  2. рдкреНрд░рдмрдВрдзрди/рд╕рдВрдЧрдардирд╛рддреНрдордХ рд╡рд┐рд░реЛрдзреА рдкреИрдЯрд░реНрди - рдпреЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкреНрд░рдмрдВрдзрди рдореЗрдВ рд╡рд┐рд░реЛрдзреА рдкреИрдЯрд░реНрди рд╣реИрдВ, рдЖрдорддреМрд░ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдмрдВрдзрдХреЛрдВ (рдпрд╛ рдкреНрд░рдмрдВрдзрдХреЛрдВ рдХреЗ рд╕рдореВрд╣) рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  3. рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдПрдВрдЯреА-рдкреИрдЯрд░реНрди - рдпреЗ рдПрдВрдЯреА-рдкреИрдЯрд░реНрди рддрдм рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рд╕рд┐рд╕реНрдЯрдо рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╡рд┐рд░реЛрдзреА рдкреИрдЯрд░реНрди рдХреА рдкреВрд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рдЖрдХрд░реНрд╖рдХ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдЬ рд╣рдо рдЙрди рд╕рднреА рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рд╕рд╛рдзрд╛рд░рдг рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реЛрдЧрд╛ред рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдмрдВрдзрди рд╡рд┐рд░реЛрдзреА рдкреИрдЯрд░реНрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

1. рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рддреНрдордХ рдкрдХреНрд╖рд╛рдШрд╛рдд

рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкрдХреНрд╖рд╛рдШрд╛рддрдХреНрд▓рд╛рд╕рд┐рдХ рдкреНрд░рдмрдВрдзрди рд╡рд┐рд░реЛрдзреА рдкреИрдЯрд░реНрди рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдирд┐рдпреЛрдЬрди рдХреЗ рджреМрд░рд╛рди рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЕрддрд┐-рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ, рддрд╛рдХрд┐ рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдкрдВрдЧреБ рдмрдирд╛рдХрд░ рдХреЛрдИ рдирд┐рд░реНрдгрдп рдпрд╛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рди рдХреА рдЬрд╛ рд╕рдХреЗред рдпрд╣ рдЕрдХреНрд╕рд░ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рд▓рдХреНрд╖реНрдп рдкреВрд░реНрдгрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЕрд╡рдзрд┐ рдХреЗ рджреМрд░рд╛рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдм рдХреБрдЫ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рд╡рд┐рд░реЛрдзреА рдкреИрдЯрд░реНрди рдХреЛ рдордВрдбрд▓рд┐рдпреЛрдВ рдореЗрдВ рдЪрд▓рдиреЗ (рдПрдХ рд░рди-рдСрдл-рдж-рдорд┐рд▓ рдмрдВрдж рд▓реВрдк), рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рд╡рд┐рд╕реНрддреГрдд рдореЙрдбрд▓ рдмрдирд╛рдиреЗ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ рд╕реНрддрд░ рдкрд░ рдЪреАрдЬреЛрдВ рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ: рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдЪрд╛рдирдХ рдЕрдкрдиреЗ рдирд╛рдо рдХреЗ рдЪреМрдереЗ рдФрд░ рдкрд╛рдВрдЪрд╡реЗрдВ рдЕрдХреНрд╖рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЙрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рд╕реВрдЪреА рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬрд┐рди рдкрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдХрд╛рдо рдХреЗ рдШрдВрдЯреЗ рдмрд┐рддрд╛рдП рдкрд┐рдЫрд▓реЗ рдЪрд╛рд░ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдирдП рд╕рд╛рд▓ рдФрд░ рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдп рдорд╣рд┐рд▓рд╛ рджрд┐рд╡рд╕ рдХреЗ рдмреАрдЪ? рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдпрд╣' рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╣реИред рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкрдХреНрд╖рд╛рдШрд╛рдд рд╕реЗ рд▓рдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдХреБрдЫ рдпреБрдХреНрддрд┐рдпрд╛рдВ рджреА рдЧрдИ рд╣реИрдВ:
  1. рдЖрдкрдХреЛ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рджреАрд░реНрдШрдХрд╛рд▓реАрди рд▓рдХреНрд╖реНрдп рдХреЛ рдПрдХ рдкреНрд░рдХрд╛рд╢ рд╕реНрддрдВрдн рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдЖрдкрдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд░реНрдгрдп рдЖрдкрдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд▓рдХреНрд╖реНрдп рдХреЗ рдХрд░реАрдм рд▓реЗ рдЬрд╛рдПред
  2. рдЫреЛрдЯреА-рдЫреЛрдЯреА рдмрд╛рддреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рди рдХрд░реЗрдВ (рдПрдХ рдорд╣рддреНрд╡рд╣реАрди рд╡рд┐рд╡рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд░реНрдгрдп рдХреНрдпреЛрдВ рд▓реЗрдВ рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рдЬреАрд╡рди рдХрд╛ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд┐рд░реНрдгрдп рдерд╛?)
  3. рдирд┐рд░реНрдгрдп рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдордп рд╕реАрдорд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВред
  4. рдХрд┐рд╕реА рдХрд╛рдо рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рди рдХрд░реЗрдВ тАФ рдмреЗрд╣рддрд░ рд╣реИ рдХрд┐ рдЙрд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред
рдпрд╣рд╛рдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЧрд╣рд░рд╛рдИ рдореЗрдВ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЕрдиреНрдп рдкреНрд░рдмрдВрдзрдХреАрдп рдкреНрд░рддрд┐рд░реВрдкреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдЗрд╕рд▓рд┐рдП, рдмрд┐рдирд╛ рдХрд┐рд╕реА рдкрд░рд┐рдЪрдп рдХреЗ, рд╣рдо рдХреБрдЫ рд╡рд╛рд╕реНрддреБрд╢рд┐рд▓реНрдк рд╡рд┐рд░реЛрдзреА рдкреИрдЯрд░реНрди рдкрд░ рдЖрдЧреЗ рдмрдврд╝реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдкреНрд░рдмрдВрдзрдХреЛрдВ рдХреЗ рдмрдЬрд╛рдп рднрд╡рд┐рд╖реНрдп рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рдкрдврд╝реЗ рдЬрд╛рдиреЗ рдХреА рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред

2. рдИрд╢реНрд╡рд░ рд╡рд╕реНрддреБ

рдПрдХ рдЧреЙрдб рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХ рдПрдВрдЯреА-рдкреИрдЯрд░реНрди рд╣реИ рдЬреЛ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЕрддреНрдпрдзрд┐рдХ рдПрдХрд╛рдЧреНрд░рддрд╛ рдФрд░ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЕрд╕рдорд╛рди рдбреЗрдЯрд╛ (рдПрдХ рд╡рд╕реНрддреБ рдЬрд┐рд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдШреВрдорддрд╛ рд╣реИ) рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЙрджрд╛рд╣рд░рдг рд▓реЗрдВ:
public class SomeUserGodObject {
   private static final String FIND_ALL_USERS_EN = "SELECT id, email, phone, first_name_en, access_counter, middle_name_en, last_name_en, created_date FROM users;
   private static final String FIND_BY_ID = "SELECT id, email, phone, first_name_en, access_counter, middle_name_en, last_name_en, created_date FROM users WHERE id = ?";
   private static final String FIND_ALL_CUSTOMERS = "SELECT id, u.email, u.phone, u.first_name_en, u.middle_name_en, u.last_name_en, u.created_date" +
           "  WHERE u.id IN (SELECT up.user_id FROM user_permissions up WHERE up.permission_id = ?)";
   private static final String FIND_BY_EMAIL = "SELECT id, email, phone, first_name_en, access_counter, middle_name_en, last_name_en, created_dateFROM users WHERE email = ?";
   private static final String LIMIT_OFFSET = " LIMIT ? OFFSET ?";
   private static final String ORDER = " ORDER BY ISNULL(last_name_en), last_name_en, ISNULL(first_name_en), first_name_en, ISNULL(last_name_ru), " +
           "last_name_ru, ISNULL(first_name_ru), first_name_ru";
   private static final String CREATE_USER_EN = "INSERT INTO users(id, phone, email, first_name_en, middle_name_en, last_name_en, created_date) " +
           "VALUES (?, ?, ?, ?, ?, ?, ?)";
   private static final String FIND_ID_BY_LANG_CODE = "SELECT id FROM languages WHERE lang_code = ?";
                                  ........
   private final JdbcTemplate jdbcTemplate;
   private Map<String, String> firstName;
   private Map<String, String> middleName;
   private Map<String, String> lastName;
   private List<Long> permission;
                                   ........
   @Override
   public List<User> findAllEnCustomers(Long permissionId) {
       return jdbcTemplate.query( FIND_ALL_CUSTOMERS + ORDER, userRowMapper(), permissionId);
   }
   @Override
   public List<User> findAllEn() {
       return jdbcTemplate.query(FIND_ALL_USERS_EN + ORDER, userRowMapper());
   }
   @Override
   public Optional<List<User>> findAllEnByEmail(String email) {
       var query = FIND_ALL_USERS_EN + FIND_BY_EMAIL + ORDER;
       return Optional.ofNullable(jdbcTemplate.query(query, userRowMapper(), email));
   }
                              .............
   private List<User> findAllWithoutPageEn(Long permissionId, Type type) {
       switch (type) {
           case USERS:
               return findAllEnUsers(permissionId);
           case CUSTOMERS:
               return findAllEnCustomers(permissionId);
           default:
               return findAllEn();
       }
   }
                              ..............тАж

   private RowMapper<User> userRowMapperEn() {
       return (rs, rowNum) ->
               User.builder()
                       .id(rs.getLong("id"))
                       .email(rs.getString("email"))
                       .accessFailed(rs.getInt("access_counter"))
                       .createdDate(rs.getObject("created_date", LocalDateTime.class))
                       .firstName(rs.getString("first_name_en"))
                       .middleName(rs.getString("middle_name_en"))
                       .lastName(rs.getString("last_name_en"))
                       .phone(rs.getString("phone"))
                       .build();
   }
}
рдпрд╣рд╛рдБ рд╣рдо рдПрдХ рд╡рд┐рд╢рд╛рд▓ рд╡рд░реНрдЧ рджреЗрдЦрддреЗ рд╣реИрдВ рдЬреЛ рд╕рдм рдХреБрдЫ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреНрд╡реЗрд░реАрдЬрд╝ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдХреБрдЫ рдбреЗрдЯрд╛ рднреА рд╣реЛрддреЗ рд╣реИрдВред рд╣рдо FindAllWithoutPageEn Facade рдореЗрдердб рднреА рджреЗрдЦрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдмрд┐рдЬрдиреЗрд╕ рд▓реЙрдЬрд┐рдХ рд╢рд╛рдорд┐рд▓ рд╣реИред рдРрд╕реА рджреЗрд╡ рд╡рд╕реНрддреБ рдЙрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд╛рд▓ рдФрд░ рдЕрдЬреАрдм рд╣реЛ рдЬрд╛рддреА рд╣реИред рд╣рдореЗрдВ рдХреЛрдб рдХреЗ рд╣рд░ рдЯреБрдХрдбрд╝реЗ рдореЗрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдЦрд┐рд▓рд╡рд╛рдбрд╝ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдХрдИ рд╕рд┐рд╕реНрдЯрдо рдШрдЯрдХ рдЗрд╕ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╕рдХрд░ рдЬреБрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВред рдРрд╕реЗ рдХреЛрдб рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рдХрдард┐рди рдФрд░ рдХрдард┐рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдХреЛрдб рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рдЙрджреНрджреЗрд╢реНрдп рд╣реЛрдЧрд╛ред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо God object рдХреЛ Dao Class рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
public class UserDaoImpl {
   private static final String FIND_ALL_USERS_EN = "SELECT id, email, phone, first_name_en, access_counter, middle_name_en, last_name_en, created_date FROM users;
   private static final String FIND_BY_ID = "SELECT id, email, phone, first_name_en, access_counter, middle_name_en, last_name_en, created_date FROM users WHERE id = ?";

                                   ........
   private final JdbcTemplate jdbcTemplate;

                                   ........
   @Override
   public List<User> findAllEnCustomers(Long permissionId) {
       return jdbcTemplate.query(FIND_ALL_CUSTOMERS + ORDER, userRowMapper(), permissionId);
   }
   @Override
   public List<User> findAllEn() {
       return jdbcTemplate.query(FIND_ALL_USERS_EN + ORDER, userRowMapper());
   }

                               ........
}
рдПрдХ рд╡рд░реНрдЧ рдЬрд┐рд╕рдореЗрдВ рдбреЗрдЯрд╛ рдФрд░ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВ:
public class UserInfo {
   private Map<String, String> firstName;
                     тАж..
   public Map<String, String> getFirstName() {
       return firstName;
   }
   public void setFirstName(Map<String, String> firstName) {
       this.firstName = firstName;
   }
                    ....
рдФрд░ рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рд╡рд┐рдзрд┐ рдХреЛ рд╕реЗрд╡рд╛ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реЛрдЧрд╛:
private List<User> findAllWithoutPageEn(Long permissionId, Type type) {
   switch (type) {
       case USERS:
           return findAllEnUsers(permissionId);
       case CUSTOMERS:
           return findAllEnCustomers(permissionId);
       default:
           return findAllEn();
   }
}

3. рд╕рд┐рдВрдЧрд▓рдЯрди

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

  2. рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдареЛрд╕ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддрд╛ рд╣реИ - рдПрдХрд▓ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╕рд┐рджреНрдзрд╛рдВрдд: рдЕрдкрдиреЗ рдкреНрд░рддреНрдпрдХреНрд╖ рдХрд░реНрддрд╡реНрдпреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рд┐рдВрдЧрд▓рдЯрди рд╡рд░реНрдЧ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рднреА рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред

  3. рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡рд░реНрдЧ рдХреА рд╕рд┐рдВрдЧрд▓рдЯрди рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рд╡рд░реНрдЧ рдХреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддреА рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдЙрджрд╛рд╣рд░рдг рдЖрдорддреМрд░ рдкрд░ рдПрдХ рд╡рд┐рдзрд┐ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╕реАрдзреЗ getInstance () рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдкрдХреЛ рд╕рд┐рдВрдЧрд▓рдЯрди рдкрд░ рд╡рд░реНрдЧ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдзрд┐ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдмрд╕ рдПрдХ рд╡рд░реНрдЧ рдХреА рдЬрдирддрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдЕрдиреБрдмрдВрдз рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред

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

    рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдпреБрдЧреНрдорди рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИ, рдФрд░ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╕рдм рдХреБрдЫ рдмрдврд╝реЗ рд╣реБрдП рдпреБрдЧреНрдорди рдХреЗ рдкрд░рд┐рдгрд╛рдо рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИред

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

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

    рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЕрдм рдХрдИ рдЕрдВрддрд╣реАрди рдФрд░ рдЕрдкреВрд░рдгреАрдп рдмрд╣рд╕реЗрдВ рдЫрд┐рдбрд╝реА рд╣реБрдИ рд╣реИрдВред рдпрд╣ рдЖрдкрдХреЛ рддрдп рдХрд░рдирд╛ рд╣реИ рдХрд┐ рд╕рд┐рдВрдЧрд▓рдЯрди рдПрдХ рдкреИрдЯрд░реНрди рд╣реИ рдпрд╛ рдПрдВрдЯреА-рдкреИрдЯрд░реНрдиред

    рд╣рдо рдЙрд╕ рдкрд░ рдЯрд┐рдХреЗ рдирд╣реАрдВ рд░рд╣реЗрдВрдЧреЗред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдЖрдЬ рдХреЗ рдЕрдВрддрд┐рдо рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рдХреА рдУрд░ рдмрдврд╝реЗрдВрдЧреЗ - рдкреЛрд▓реНрдЯрд░рдЬрд┐рд╕реНрдЯред

4. рдкреЛрд▓реНрдЯрд░рдЬрд┐рд╕реНрдЯ

рдПрдХ рдкреЙрд▓реАрдЯрд░реНрдЬрд┐рд╕реНрдЯ рдПрдХ рд╡рд┐рд░реЛрдзреА-рдкреИрдЯрд░реНрди рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╡реНрдпрд░реНрде рд╡рд░реНрдЧ рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд░реНрдЧ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рдХреЗрд╡рд▓ рдЕрдореВрд░реНрддрддрд╛ рдХреА рдЕрдирд╛рд╡рд╢реНрдпрдХ рдкрд░рдд рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдпрд╣ рдкреНрд░рддрд┐рдорд╛рди рд╕реНрд╡рдпрдВ рдХреЛ рд░рд╛рдЬреНрдп рд╕реЗ рд░рд╣рд┐рдд рдЕрд▓реНрдкрдХрд╛рд▓рд┐рдХ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдХрдЯ рдХрд░рддрд╛ рд╣реИред рдЗрди рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдХреНрд╕рд░ рдЕрдиреНрдп, рдЕрдзрд┐рдХ рд╕реНрдерд╛рдпреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
public class UserManager {
   private UserService service;
   public UserManager(UserService userService) {
       service = userService;
   }
   User createUser(User user) {
       return service.create(user);
   }
   Long findAllUsers(){
       return service.findAll().size();
   }
   String findEmailById(Long id) {
       return service.findById(id).getEmail();}
   User findUserByEmail(String email) {
       return service.findByEmail(email);
   }
   User deleteUserById(Long id) {
       return service.delete(id);
   }
}
рд╣рдореЗрдВ рдРрд╕реА рд╡рд╕реНрддреБ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ рдЬреЛ рд╕рд┐рд░реНрдл рдПрдХ рдордзреНрдпрд╕реНрде рд╣реИ рдФрд░ рдЕрдкрдирд╛ рдХрд╛рдо рдХрд┐рд╕реА рдФрд░ рдХреЛ рд╕реМрдВрдкрддреА рд╣реИ? рд╣рдо рдЗрд╕реЗ рдЦрддреНрдо рдХрд░ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд░рд╣рдиреЗ рд╡рд╛рд▓реА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдереЛрдбрд╝реА рд╕реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджреЗрддреЗ рд╣реИрдВред рдЕрдЧрд▓рд╛, рд╣рдо рдЙрди рдкреИрдЯрд░реНрдиреЛрдВ рдХреА рдУрд░ рдмрдврд╝рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ (рд╕рд╛рдзрд╛рд░рдг рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ), рдпрд╛рдиреА рд╡рд┐рдХрд╛рд╕ рд╡рд┐рд░реЛрдзреА рдкреИрдЯрд░реНрди ред

5. рд╣рд╛рд░реНрдб рдХреЛрдбрд┐рдВрдЧ

рддреЛ рд╣рдо рдЗрд╕ рднрдпрд╛рдирдХ рд╢рдмреНрдж рдкрд░ рдкрд╣реБрдВрдЪреЗ рд╣реИрдВ: рд╣рд╛рд░реНрдб рдХреЛрдбрд┐рдВрдЧред рдЗрд╕ рдПрдВрдЯреА-рдкреИрдЯрд░реНрди рдХрд╛ рд╕рд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдХреЛрдб рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдФрд░/рдпрд╛ рд╕рд┐рд╕реНрдЯрдо рд╡рд╛рддрд╛рд╡рд░рдг рд╕реЗ рджреГрдврд╝рддрд╛ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред рдпрд╣ рдХреЛрдб рдХреЛ рдЕрдиреНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдПрдВрдЯреА-рдкреИрдЯрд░реНрди рдореИрдЬрд┐рдХ рдирдВрдмрд░реЛрдВ рдХреЗ рд╕рд╛рде рдирд┐рдХрдЯрддрд╛ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ (рдпреЗ рдПрдВрдЯреА-рдкреИрдЯрд░реНрди рдЕрдХреНрд╕рд░ рдЖрдкрд╕ рдореЗрдВ рдЬреБрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВ)ред рдЙрджрд╛рд╣рд░рдг:
public Connection buildConnection() throws Exception {
   Class.forName("com.mysql.cj.jdbc.Driver");
   connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/someDb?characterEncoding=UTF-8&characterSetResults=UTF-8&serverTimezone=UTC", "user01", "12345qwert");
   return connection;
}
рджрд░реНрдж рд╣реЛрддрд╛ рд╣реИ, рд╣реИ рдирд╛? рдпрд╣рд╛рдВ рд╣рдо рдЕрдкрдиреА рдХрдиреЗрдХреНрд╢рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рд╣рд╛рд░реНрдб рдХреЛрдб рдХрд░рддреЗ рд╣реИрдВред рдирддреАрдЬрддрди, рдХреЛрдб рдХреЗрд╡рд▓ MySQL рдХреЗ рд╕рд╛рде рд╣реА рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХреЛрдб рдореЗрдВ рдЧреЛрддрд╛ рд▓рдЧрд╛рдиреЗ рдФрд░ рд╕рдм рдХреБрдЫ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдПрдХ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд░рдЦрдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛрдЧрд╛:
spring:
  datasource:
    jdbc-url:jdbc:mysql://localhost:3306/someDb?characterEncoding=UTF-8
    driver-class-name: com.mysql.cj.jdbc.Driver
    username:  user01
    password:  12345qwert
рдПрдХ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред

6. рдирд╛рд╡ рдХрд╛ рд▓рдВрдЧрд░

рдПрдВрдЯреА-рдкреИрдЯрд░реНрди рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдПрдХ рдирд╛рд╡ рдПрдВрдХрд░ рдХрд╛ рдорддрд▓рдм рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЙрди рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рд░рдЦрдирд╛ рд╣реИ рдЬреЛ рдЕрдм рдХреБрдЫ рдЕрдиреБрдХреВрд▓рди рдпрд╛ рд░реАрдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рд╕рд╛рде рд╣реА, рдХреЛрдб рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ "рднрд╡рд┐рд╖реНрдп рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП" рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрдм рдЖрдкрдХреЛ рдЕрдЪрд╛рдирдХ рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛред рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ, рдпрд╣ рдЖрдкрдХреЗ рдХреЛрдб рдХреЛ рдХреВрдбрд╝реЗрджрд╛рди рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг:
public User update(Long id, User request) {
   User user = mergeUser(findById(id), request);
   return userDAO.update(user);
}
private User mergeUser(User findUser, User requestUser) {
   return new User(
           findUser.getId(),
           requestUser.getEmail() != null ? requestUser.getEmail() : findUser.getEmail(),
           requestUser.getFirstName() != null ? requestUser.getFirstName() : findUser.getFirstNameRu(),
           requestUser.getMiddleName() != null ? requestUser.getMiddleName() : findUser.getMiddleNameRu(),
           requestUser.getLastName() != null ? requestUser.getLastName() : findUser.getLastNameEn(),
           requestUser.getPhone() != null ? requestUser.getPhone() : findUser.getPhone());
}
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЕрджреНрдпрддрди рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдХреЛ рд╡рд┐рдзрд┐ рд╕реЗ рдкрд╛рд░рд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рд╡рд┐рд▓рдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ (рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрджреНрдпрддрди рд╡рд┐рдзрд┐ рдореЗрдВ рдкрд╛рд╕ рд╣реЛ рдЧрдпрд╛ рд╣реИ рддреЛ рдПрдХ рд╢реВрдиреНрдп рдлрд╝реАрд▓реНрдб рд╣реИ, рддреЛ рдкреБрд░рд╛рдирд╛ рдлрд╝реАрд▓реНрдб рдорд╛рди рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) . рдлрд┐рд░ рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдПрдХ рдирдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЕрднрд┐рд▓реЗрдЦреЛрдВ рдХреЛ рдкреБрд░рд╛рдиреЗ рдХреЗ рд╕рд╛рде рд╡рд┐рд▓рдп рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдмрд▓реНрдХрд┐ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рднрд▓реЗ рд╣реА рдЕрд╢рдХреНрдд рдХреНрд╖реЗрддреНрд░ рд╣реЛрдВ, рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдкреБрд░рд╛рдиреЗ рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
public User update(Long id, User request) {
   return userDAO.update(user);
}
рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдорд░реНрдЬрдпреВрдЬрд░ рдХрд╛ рдЕрдм рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реЛрдЧрд╛ - рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдпрд╣ рд╡рд┐рдзрд┐ (рдпрд╛ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рд╡рд┐рдЪрд╛рд░) рдХрд┐рд╕реА рджрд┐рди рдХрд╛рдо рдЖ рд╕рдХрддреА рд╣реИ? рдРрд╕рд╛ рдХреЛрдб рдХреЗрд╡рд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдЬрдЯрд┐рд▓ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рднреНрд░рдо рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИ, рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдХреЛрдИ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдореВрд▓реНрдп рдирд╣реАрдВ рд╣реИред рд╣рдореЗрдВ рдпрд╣ рдирд╣реАрдВ рднреВрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЬрдм рдЖрдк рдХрд┐рд╕реА рдЕрдиреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдирд┐рдХрд▓рддреЗ рд╣реИрдВ рддреЛ "рдореГрдд рдЯреБрдХрдбрд╝реЗ" рд╡рд╛рд▓реЗ рдРрд╕реЗ рдХреЛрдб рдХреЛ рдХрд┐рд╕реА рд╕рд╣рдпреЛрдЧреА рдХреЛ рдкрд╛рд╕ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ред рдирд╛рд╡ рдПрдВрдХрд░реЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдХреЛрдб рдХреЛ рд░рд┐рдлреИрдХреНрдЯрд░ рдХрд░рдирд╛ рд╣реИ, рдпрд╛рдиреА рдХреЛрдб рдХреЗ рдЕрдиреБрднрд╛рдЧреЛрдВ рдХреЛ рд╣рдЯрд╛рдПрдВ (рджрд┐рд▓ рддреЛрдбрд╝рдиреЗ рд╡рд╛рд▓рд╛, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ)ред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рд╡рд┐рдХрд╛рд╕ рдХрд╛рд░реНрдпрдХреНрд░рдо рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╕рдордп, рдРрд╕реЗ рдПрдВрдХрд░реЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ (рд╕рд╛рдл-рд╕рдлрд╛рдИ рдХреЗ рд▓рд┐рдП рд╕рдордп рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдирд╛)ред

7. рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗрд╕рдкреВрд▓

рдЗрд╕ рд╡рд┐рд░реЛрдзреА рдкреИрдЯрд░реНрди рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреВрд▓ рдкреИрдЯрд░реНрди рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдирд╛ рд╣реЛрдЧрд╛ред рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреВрд▓ (рд╕рдВрд╕рд╛рдзрди рдкреВрд▓) рдПрдХ рд░рдЪрдирд╛рддреНрдордХ рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рд╣реИ , рдЬреЛ рдЖрд░рдВрднрд┐рдХ рдФрд░ рд░реЗрдбреА-рдЯреВ-рдпреВрдЬрд╝ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИред рдЬрдм рдХрд┐рд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдЙрд╕реЗ рдЗрд╕ рдкреВрд▓ рд╕реЗ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд░рд╣ рдЬрд╛рддреА рд╣реИ, рддреЛ рд╡рд╣ рдирд╖реНрдЯ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЗрд╕реЗ рдкреВрд▓ рдореЗрдВ рд▓реМрдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдкреИрдЯрд░реНрди рдЖрдорддреМрд░ рдкрд░ рднрд╛рд░реА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рд╣рд░ рдмрд╛рд░ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдиреЗ рдкрд░ рд╕рдордп рд▓реЗрдиреЗ рд╡рд╛рд▓реА рд╣реЛрддреА рд╣реИрдВ, рдЬреИрд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╕рдордпред рдЖрдЗрдП рдПрдХ рдЫреЛрдЯрд╛ рдФрд░ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред рдпрд╣рд╛рдБ рдПрдХ рд╡рд░реНрдЧ рд╣реИ рдЬреЛ рдЗрд╕ рдкреИрдЯрд░реНрди рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ:
class ReusablePool {
   private static ReusablePool pool;
   private List<Resource> list = new LinkedList<>();
   private ReusablePool() {
       for (int i = 0; i < 3; i++)
           list.add(new Resource());
   }
   public static ReusablePool getInstance() {
       if (pool == null) {
           pool = new ReusablePool();
       }
       return pool;
   }
   public Resource acquireResource() {
       if (list.size() == 0) {
           return new Resource();
       } else {
           Resource r = list.get(0);
           list.remove(r);
           return r;
       }
   }
   public void releaseResource(Resource r) {
       list.add(r);
   }
}
рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ рдЙрдкрд░реЛрдХреНрдд рд╕рд┐рдВрдЧрд▓рдЯрди рдкреИрдЯрд░реНрди/рдПрдВрдЯреА-рдкреИрдЯрд░реНрди рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ , рдЕрд░реНрдерд╛рдд рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╡рд╕реНрддреБ рд╣реЛ рд╕рдХрддреА рд╣реИред рдпрд╣ рдХреБрдЫ Resourceрд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкреВрд▓ рдХреЛ 4 рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╕реЗ рднрд░рддрд╛ рд╣реИред рдЬрдм рдЖрдк рдХреЛрдИ рд╡рд╕реНрддреБ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрд╕реЗ рдкреВрд▓ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрджрд┐ рдХреЛрдИ рдЙрдкрд▓рдмреНрдз рд╡рд╕реНрддреБ рдирд╣реАрдВ рд╣реИ, рддреЛ рдПрдХ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ рдФрд░ рддреБрд░рдВрдд рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддреА рд╣реИ)ред рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд╕реНрддреБ рдХреЛ рд╡рд╛рдкрд╕ рд░рдЦрдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИред рд╕рдВрд╕рд╛рдзрди рд╡рд╕реНрддреБрдПрдВ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИрдВ:
public class Resource {
   private Map<String, String> patterns;
   public Resource() {
       patterns = new HashMap<>();
       patterns.put("proxy", "https://en.wikipedia.org/wiki/Proxy_pattern");
       patterns.put("bridge", "https://en.wikipedia.org/wiki/Bridge_pattern");
       patterns.put("facade", "https://en.wikipedia.org/wiki/Facade_pattern");
       patterns.put("builder", "https://en.wikipedia.org/wiki/Builder_pattern");
   }
   public Map<String, String> getPatterns() {
       return patterns;
   }
   public void setPatterns(Map<String, String> patterns) {
       this.patterns = patterns;
   }
}
рдпрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЫреЛрдЯреА рд╕реА рд╡рд╕реНрддреБ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рдбрд┐рдЬрд╛рдЗрди рдкреИрдЯрд░реНрди рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдирдХреНрд╢рд╛ рд╣реИ рдФрд░ рдореВрд▓реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рд▓рд┐рдВрдХ, рд╕рд╛рде рд╣реА рдорд╛рдирдЪрд┐рддреНрд░ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рддрд░реАрдХреЗ рднреА рд╣реИрдВред рдЖрдЗрдП рдореБрдЦреНрдп рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:
class SomeMain {
   public static void main(String[] args) {
       ReusablePool pool = ReusablePool.getInstance();

       Resource firstResource = pool.acquireResource();
       Map<String, String> firstPatterns = firstResource.getPatterns();
       // use our map somehow...
       pool.releaseResource(firstResource);

       Resource secondResource = pool.acquireResource();
       Map<String, String> secondPatterns = firstResource.getPatterns();
       // use our map somehow...
       pool.releaseResource(secondResource);

       Resource thirdResource = pool.acquireResource();
       Map<String, String> thirdPatterns = firstResource.getPatterns();
       // use our map somehow...
       pool.releaseResource(thirdResource);
   }
}
рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрдкрд╖реНрдЯ рд╣реИ: рд╣рдореЗрдВ рдПрдХ рдкреВрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдорд┐рд▓рддрд╛ рд╣реИ, рдкреВрд▓ рд╕реЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рд░рд┐рд╕реЛрд░реНрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рдореИрдк рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд░реЗрдВ, рдФрд░ рдЖрдЧреЗ рдХреЗ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдм рдкреВрд▓ рдореЗрдВ рдЗрд╕рдХреЗ рд╕реНрдерд╛рди рдкрд░ рд░рдЦ рджреЗрдВред рд╡реЛрдЗрд▓рд╛, рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреВрд▓ рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рд╣реИред рд▓реЗрдХрд┐рди рд╣рдо рдПрдВрдЯреА-рдкреИрдЯрд░реНрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рдереЗ, рд╣реИ рдирд╛? рдореБрдЦреНрдп рд╡рд┐рдзрд┐ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рдорд▓реЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
Resource fourthResource = pool.acquireResource();
   Map<String, String> fourthPatterns = firstResource.getPatterns();
// use our map somehow...
fourthPatterns.clear();
firstPatterns.put("first","blablabla");
firstPatterns.put("second","blablabla");
firstPatterns.put("third","blablabla");
firstPatterns.put("fourth","blablabla");
pool.releaseResource(fourthResource);
рдпрд╣рд╛рдБ, рдлрд┐рд░ рд╕реЗ, рд╣рдореЗрдВ рдПрдХ рд░рд┐рд╕реЛрд░реНрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдорд┐рд▓рддрд╛ рд╣реИ, рд╣рдореЗрдВ рдЗрд╕рдХреЗ рдкреИрдЯрд░реНрди рдХрд╛ рдирдХреНрд╢рд╛ рдорд┐рд▓рддрд╛ рд╣реИ, рдФрд░ рд╣рдо рдореИрдк рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдкреВрд▓ рдореЗрдВ рд╡рд╛рдкрд╕ рд╕рд╣реЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЗрд╕реЗ рд╕рд╛рдлрд╝ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рджреВрд╖рд┐рдд рдбреЗрдЯрд╛ рд╕реЗ рднрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╕рдВрд╕рд╛рдзрди рд╡рд╕реНрддреБ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдкрдпреБрдХреНрдд рд╣реЛ рдЬрд╛рддреА рд╣реИред рдСрдмреНрдЬреЗрдХреНрдЯ рдкреВрд▓ рдХреЗ рдореБрдЦреНрдп рд╡рд┐рд╡рд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдХреЛрдИ рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд╛рдкрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдкреВрд▓ рдореЗрдВ рд▓реМрдЯрд╛рдИ рдЧрдИ рд╡рд╕реНрддреБрдПрдВ рдЧрд▓рдд рдпрд╛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд░рд╣рддреА рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░реЗ рдбрд┐рдЬрд╛рдЗрди рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗрд╕рдкреВрд▓ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреНрдпрд╛ рдЙрди рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдЕрд░реНрде рд╣реИ рдЬреЛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИрдВ? рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╣рдо рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдЖрдВрддрд░рд┐рдХ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:
public Resource() {
   patterns = new HashMap<>();
   patterns.put("proxy", "https://en.wikipedia.org/wiki/Proxy_pattern");
   patterns.put("bridge", "https://en.wikipedia.org/wiki/Bridge_pattern");
   patterns.put("facade", "https://en.wikipedia.org/wiki/Facade_pattern");
   patterns.put("builder", "https://en.wikipedia.org/wiki/Builder_pattern");
   patterns = Collections.unmodifiableMap(patterns);
}
рдореИрдк рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢реЗрдВ рдФрд░ рдЗрдЪреНрдЫрд╛рдПрдБ рдорд┐рдЯ рдЬрд╛рдПрдБрдЧреА, рдЙрдирдХреЗ рджреНрд╡рд╛рд░рд╛ рдЬрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП UnsupportedOperationException рдХреЗ рдХрд╛рд░рдг рдзрдиреНрдпрд╡рд╛рджред рдПрдВрдЯреА-рдкреИрдЯрд░реНрди рдЬрд╛рд▓ рд╣реИрдВ рдЬреЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд╕рдордп рдХреА рддреАрд╡реНрд░ рдХрдореА, рд▓рд╛рдкрд░рд╡рд╛рд╣реА, рдЕрдиреБрднрд╡рд╣реАрдирддрд╛ рдпрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкреНрд░рдмрдВрдзрдХреЛрдВ рдХреЗ рджрдмрд╛рд╡ рдХреЗ рдХрд╛рд░рдг рдЕрдХреНрд╕рд░ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рд╣рдбрд╝рдмрдбрд╝реА рдХрд░рдирд╛, рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ, рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛рдПрдБ рдкреИрджрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЙрдирд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд▓реЗрдЦ рдХреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рд░реА...
рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ
  • рд▓реЛрдХрдкреНрд░рд┐рдп
  • рдирдпрд╛
  • рдкреБрд░рд╛рдирд╛
рдЯрд┐рдкреНрдкрдгреА рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд╕рд╛рдЗрди рдЗрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛
рдЗрд╕ рдкреЗрдЬ рдкрд░ рдЕрднреА рддрдХ рдХреЛрдИ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдирд╣реАрдВ рд╣реИрдВ