рдореИрдВ рдЕрдХреНрд╕рд░ рдФрд░ рд╕реНрд╡рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ рдФрд░, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк - рдмрд╣реБрдд рдмрд╛рд░ рдмрдирд╛рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ
рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдФрд░ рд░реВрдкреЛрдВ рдХреЗ рд╢реНрд░реЛрддрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреБрдЫ рдкреНрд░рдЬрд╛рддрд┐рдпрд╛рдВ рджреВрд╕рд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд╣реИрдВ,
рдФрд░ рдиреАрдЪреЗ рдореИрдВ рдЙрдирдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдиреБрд╕реНрдЦрд╛ рджреВрдВрдЧрд╛ред
рд╢рд╛рдпрдж рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореВрд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕рд╛рд╣рд┐рддреНрдп рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИред
UPD : рдПрдХ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП pyatigil рдХрд╛ рдзрдиреНрдпрд╡рд╛рдж рдЬреЛ рдПрдХ рд╕рдорд╛рди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╢реИрд▓реА рдореЗрдВредрд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рд░
рдмрджрд▓рддреЗ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдВрдЧ рдЗрдВрдЯрд░рдлреЗрд╕ рдпрд╛ рдЬрдЯрд┐рд▓ рд╕рдВрд░рдЪрдирд╛рдПрдВ рдмрдирд╛рддреЗ рд╕рдордп (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдПрдХ рдбреЛрдореЗрди рдореЙрдбрд▓), рдЕрдХреНрд╕рд░ рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреЛ рдЕрдкрдиреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рднреА рдЗрдЪреНрдЫреБрдХ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдЖрдорддреМрд░ рдкрд░, рдЗрд╕ рддрд░рд╣ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреИрд╕реЗ рддрд░реАрдХреЗ рд╣реЛрддреЗ рд╣реИрдВ:
public void addMyObjectListener(IMyObjectListener listener); public void removeMyObjectListener(IMyObjectListener listener);
рдЬрд╣рд╛рдБ IMyObjectListener рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ рдЬреЛ рдЗрд╕ рд╡рд╕реНрддреБ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
public interface IMyObjectListener { public void dataAdded(MyObjectEvent event); public void dataRemoved(MyObjectEvent event); public void dataChanged(MyObjectEvent event); }
рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдгрд┐рдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдпрд╣ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
- рд╢реНрд░реЛрддрд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА (рдкреНрд░рдХрд╛рд░ IMyObjectListener рдХреА рд╡рд╕реНрддреБрдУрдВ) рд░рдЦреЗрдВ рдФрд░ addMyObjectListener (IMyObjectListener) рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдХреЗ рдФрд░ рдЗрд╕реЗ рд╣рдЯрд╛рдПрдВред
- рд╢реНрд░реЛрддрд╛ рдЗрдВрдЯрд░рдлреЗрд╕ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП, рдЯрд╛рдЗрдк рдПрдИрдИрдИрд╡реЗрдВрдЯ (...) рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреА рдПрдХ рд╡рд┐рдзрд┐ рдкреНрд░рджрд╛рди рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, IMyObjectListener рдкреНрд░рдХрд╛рд░ рдХреЗ рд╢реНрд░реЛрддрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рддреАрди рдЖрдВрддрд░рд┐рдХ рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
- fireDataAdded (MyObjectEvent рдИрд╡реЗрдВрдЯ)
- рдлрд╝рд╛рдпрд░рдбреЙрдЯрд░реЗрдо (MyObjectEvent рдИрд╡реЗрдВрдЯ)
- рдлрд╛рдпрд░рдбрд╛рдЯрд╛рдЪреЗрдВрдЬ (MyObjectEvent рдЗрд╡реЗрдВрдЯ)
рдпреЗ рд╕рднреА рддрд░реАрдХреЗ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╕рднреА рдкрдВрдЬреАрдХреГрдд рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рдШрдЯрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрдирд╛рдПрдВ рднреЗрдЬрддреЗ рд╣реИрдВред
- рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╣рд╛рдВ рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рдлрд╛рдпрд░рдПрдХреНрд╕рдПрдХреНрд╕рдПрдХреНрд╕рдПрдХреНрд╕рдПрдХреНрд╕ (...) рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВред
рдПрдХ рджрд░реНрдЬрди рдпрд╛ рджреЛ рджрд░реНрдЬрди рдРрд╕реА рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛рдлреА рдмреЛрдЭ рдФрд░ рдердХрд╛рдК рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХ рд╣реА рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрд╡рд▓реЛрдХрдиреАрдп рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдХрдИ рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
- рдЖрдкрдХреЛ рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп рд╡рд╕реНрддреБ рдХреЗ рдмрд╣реБрдЖрдпрд╛рдореА рдЙрдкрдпреЛрдЧ рдХреА рджреЗрдЦрднрд╛рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХрд┐рд╕реА рднреА рдкрд░рд┐рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╢реНрд░реЛрддрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдХреА рдЕрдЦрдВрдбрддрд╛ рдФрд░ рдЙрдирдХреЗ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рддрдВрддреНрд░ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП;
- рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╢реНрд░реЛрддрд╛ рдореЗрдВ рд╕реЗ рдХреЛрдИ рдПрдХ рдШрдЯрдирд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╕рдордп рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддрд╛ рд╣реИ?
- рдЗрд╕реЗ рдЯреНрд░реИрдХ рдХрд░рдирд╛ рдФрд░ рдХрд┐рд╕реА рддрд░рд╣ рдЪрдХреНрд░реАрдп рдЕрд▓рд░реНрдЯ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдЗрди рд╕рднреА рдореБрджреНрджреЛрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдХрд┐рд╕реА рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдЭрдВрдбреЗ, рдЪреЗрдХ, рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝, рдЖрджрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рднреА рдиреБрдХрд╕рд╛рдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдЪрд▓ рд╕рдХреЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдЬрдм, рдореИрдВ рджреЛрд╣рд░рд╛рддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рдПрдХ рджрд░реНрдЬрди рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рд╕рдорд╛рди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ (рддрд░реАрдХреЛрдВ рдФрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдирд╛рдо рддрдХ) рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, рдпрд╣ рд╕рдм рдХрд╛рдлреА рдмреЛрдЭ рдмрди рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рдЖрд▓реЗрдЦ рд╢реНрд░реЛрддрд╛ рд╕рдорд░реНрдерди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдкреНрд░реЙрдХреНрд╕реА рдХрдХреНрд╖рд╛рдУрдВ рдХреА рдЧрддрд┐рд╢реАрд▓ рд░рдЪрдирд╛ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдкрд░рд┐рдгрд╛рдореА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрдкрдпреЛрдЧ рдФрд░ рдкреНрд░рдХрд╛рд░-рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдЦреЛрдП рдмрд┐рдирд╛ рдХрд┐рд╕реА рднреА рд╡рд░реНрдЧ рд╕реЗ рдЬреБрдбрд╝реА рд╣реЛ рд╕рдХрддреА рд╣реИред
рд╕рдорд╛рдзрд╛рди рдХрд╛ рд╡рд┐рдЪрд╛рд░
рдКрдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд IMyObjectListener рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдФрд░ рдРрд╕реЗ рдЕрдиреНрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
public interface IListenerSupport<T> { public void addListener(T listener); public void removeListener(T listener); }
рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╡рд░реНрдЧ рд╣реИ рдЬреЛ рдЗрди рджреЛрдиреЛрдВ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ:
class MyObjectListenerSupport implements IMyObjectListener, IListenerSupport<IMyObjectListener> { public void addListener(IMyObjectListener listener) {
рдлрд┐рд░ рд▓рдХреНрд╖реНрдп рд╡рд░реНрдЧ рдХреЛ рдЗрд╕ рддрд░рд╣ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
public class MyObject { private MyObjectListenerSupport listeners = new MyObjectListenerSupport(); public void addMyObjectListener(IMyObjectListener listener) { listeners.addListener(listener); } public void removeMyObjectListener(IMyObjectListener listener) { listeners.removeListener(listener); } protected void fireDataAdded(MyObjectEvent event) { listeners.dataAdded(event); } protected void fireDataRemoved(MyObjectEvent event) { listeners.dataRemoved(event); } protected void fireDataChanged(MyObjectEvent event) { listeners.dataChanged(event); } }
рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ, рд╢реНрд░реЛрддрд╛рдУрдВ рдФрд░ рд╕реВрдЪрдирд╛рдУрдВ рдХреА рд╕реВрдЪреА рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рд╕рднреА рддрд░реНрдХ рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ рдореЗрдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд▓рдХреНрд╖реНрдп рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп рдХрдХреНрд╖рд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реЛ рдЧрдИ рд╣реИред рдпрджрд┐, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдлрд╛рдпрд░рдПрдХреНрд╕рдПрдПрдирдПрдХреНрд╕рдПрдХреНрд╕ (...) рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдХреЛрдб рдХреА рдХреЗрд╡рд▓ рдПрдХ рдкрдВрдХреНрддрд┐ рд╣реИ, рдЬреЛ рдХрд╛рдлреА рдЬрд╛рдирдХрд╛рд░реАрдкреВрд░реНрдг рд╣реИ рдФрд░ рд╕реАрдзреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред
рдЕрдЧрд▓реА рдЙрдкрдзрд╛рд░рд╛ рдпрд╣ рджрд┐рдЦрд╛рдПрдЧреА рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рддрдХ рдХреИрд╕реЗ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рдП рдФрд░ XXXXListenerSupport рдЬреИрд╕реА рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рд▓рдЧрд╛рддрд╛рд░ рдЙрддреНрдкрд╛рджрди рди рдХрд┐рдпрд╛ рдЬрд╛рдПред
рд╕рд╛рдорд╛рдиреНрдп рдиреБрд╕реНрдЦрд╛
рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП, рдЧрддрд┐рд╢реАрд▓ рдкреНрд░реЙрдХреНрд╕реА рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╣реИред
рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХреБрдЫ рднреА рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдЬреНрдпрд╛рджрд╛рддрд░ рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИред
public class ListenerSupportFactory { private ListenerSupportFactory() {} @SuppressWarnings("unchecked") public static <T> T createListenerSupport(Class<T> listenerInterface) { return (T)Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(), new Class<?>[] { IListenerSupport.class, listenerInterface }, new ListenerInvocationHandler<T>(listenerInterface)); } private static class ListenerInvocationHandler<T> implements InvocationHandler { private final Class<T> _listener_iface; private final Logger _log; private final List<T> _listeners = Collections.synchronizedList(new ArrayList<T>()); private final Set<String> _current_events = Collections.synchronizedSet(new HashSet<String>()); private ListenerInvocationHandler(Class<T> listenerInterface) { _listener_iface = listenerInterface;
рдмрд╕ рдЗрддрдирд╛ рд╣реАред
рд╢реНрд░реЛрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рд╕рдХреНрд░рд┐рдпрдг,
рдХреЗрд╡рд▓ рд╢реНрд░реЛрддрд╛
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ IMyObjectListener, рд▓рдХреНрд╖реНрдп рдЕрд╡рд▓реЛрдХрди рд╡рд░реНрдЧ рдХреЛ рдирд┐рдореНрди рдкреНрд░рдХрд╛рд░ рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
public class MyObject { private final MyObjectListener listeners; public MyObject() { listeners = ListenerSupportFactory.createListenerSupport(MyObjectListener.class); } public void addMyObjectListener(IMyObjectListener listener) { ((IListenerSupport<MyObjectListener>)listeners).addListener(listener); } public void removeMyObjectListener(IMyObjectListener listener) { ((IListenerSupport<MyObjectListener>)listeners).removeListener(listener); } public void someSuperBusinessMethod(SuperMethodArgs args) {