рдпрд╣ рдЖрд▓реЗрдЦ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЙрди рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдЬреЛ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдореЗрдВ рдЦреЛ рдЬрд╛рддреЗ рд╣реИрдВ рдЬрдм рд╡реЗ рд╕рд╡рд╛рд▓ рд╕реБрдирддреЗ рд╣реИрдВ "рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдФрд░ рдПрдХ рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рдХреЗ рдмреАрдЪ рдореБрдЦреНрдп рдЕрдВрддрд░ рдХреНрдпрд╛ рд╣реИрдВ, рдФрд░ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдм рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рджреВрд╕рд░рд╛ рдХрдм рд╣реИ?" рдФрд░ рдпрд╣ рдЙрди рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдЬреЛ рд╢рдмреНрдж "рдкреИрдЯрд░реНрди" рдкрд░, рд╣рддреЛрддреНрд╕рд╛рд╣рд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдпрд╛ рдЦреБрдж рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддреЗ рд╣реИрдВ :)
рдПрдХ рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рдХреНрдпрд╛ рд╣реИ?
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рдпрд╛рдж рдХрд░реЗрдВ рдХрд┐ рдПрдХ рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИред рдХрд┐рд╕реА рднреА рд╕реАрдПрд▓рдЖрдИ-рдЕрдиреБрд░реВрдк рднрд╛рд╖рд╛ рдореЗрдВ, рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдХреЛ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рддрд┐рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
рдХреЛрдИ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░
рдирд╣реАрдВ рд╣реИрдВ ред рд╕рднреА рд╕рджрд╕реНрдп, рдЬрд┐рдирдореЗрдВ рд╕реНрдереИрддрд┐рдХ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдХреЗрд╡рд▓ рдПрдХ рд╡рд░реНрдЧ рдХреЗ рднреАрддрд░ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдХрдХреНрд╖рд╛рдПрдВ рд╕реНрд╡рдпрдВ (рдХрд┐рд╕реА рднреА рдирд╛рдо рдкрд░) рдХреЛ рд╕рдореВрд╣реАрдХреГрдд
рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдЕрдЧрд░ рдкрд╣рд▓реЗ рдПрдХ рдирд┐рдЬреА рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдирдХрд▓ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛, рддреЛ .NET рдлреНрд░реЗрдорд╡рд░реНрдХ 2.0 рдореЗрдВ рдордВрдЪ рд╕реНрддрд░ рдкрд░ рд╕реНрдерд┐рд░ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред рдПрдХ рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рдФрд░ рдПрдХ рдирд┐рдпрдорд┐рдд, рдЧреИрд░-рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рдХреЗ рдмреАрдЪ рдореБрдЦреНрдп рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐
рдирдП рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ рдЗрдВрд╕реНрдЯреЗрдВрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рд╕реНрдереИрддрд┐рдХ рдХрдХреНрд╖рд╛рдПрдВ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд╛рдорд╕реНрдерд╛рди рд╣реИрдВ - рдХреЗрд╡рд▓ рдмрд╛рдж рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╡реЗ рд╕реНрдерд┐рд░ рдЪрд░ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╣реИрдВ рдФрд░ рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВред
рд╕рд┐рдВрдЧрд▓рдЯрди рдХреНрдпрд╛ рд╣реИ?
рдЧреИрдВрдЧ рдСрдлрд╝ рдлреЛрд░ (GoF) рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЬреЗрдиреЗрд░рд┐рдХ рдкреИрдЯрд░реНрди рдореЗрдВ рд╕реЗ рдПрдХред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрдХреНрд╖рд╛ рдореЗрдВ
рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдЙрджрд╛рд╣рд░рдг рд╣реИ рдФрд░ рдЗрд╕реЗ
рд╡реИрд╢реНрд╡рд┐рдХ рдкрд╣реБрдВрдЪ рдмрд┐рдВрджреБ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╣рдо рдпрд╣рд╛рдВ рдЗрд╕ рдкреИрдЯрд░реНрди, рдЗрд╕рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ - рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рдпрд╣рд╛рдВ рдФрд░
рдпрд╣рд╛рдВ )ред рдореИрдВ рдХреЗрд╡рд▓ рдЗрд╕ рдмрд╛рдд рдкрд░ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рд╕рд┐рдВрдЧрд▓рдиреЗрдЯ рдереНрд░реЗрдб рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИрдВ рдФрд░ рд╕рд░рд▓ рдФрд░ рд╡рд┐рд▓рдВрдмрд┐рдд рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рд╕рд╛рде рдирд╣реАрдВред
рдФрд░ рдЕрдЧрд░ рдХреЛрдИ рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИ - рддреЛ рдЕрдзрд┐рдХ рдЙрддреНрдкрд╛рджрди рдХреНрдпреЛрдВ рдХрд░реЗрдВ?
рддреЛ рдЗрди рджреЛ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рдмреАрдЪ рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реИ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХрдм рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдпрд╣ рд╡рд░реНрдгрди рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ:
| рдПрдХрд╛рдХреА рд╡рд╕реНрддреБ
| рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ
|
---|
рдкрд╣реБрдВрдЪ рдмрд┐рдВрджреБрдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛
| рдПрдХ рдФрд░ рдХреЗрд╡рд▓ рдПрдХ) рдПрдХреНрд╕реЗрд╕ рдкреНрд╡рд╛рдЗрдВрдЯ - рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╕реНрдЯреИрдЯрд┐рдХ рдлреАрд▓реНрдб
| рдПрди (рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд░реНрдЧ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ)
|
рд╡рд░реНрдЧ рдХреА рд╡рд┐рд░рд╛рд╕рдд
| рд╢рд╛рдпрдж, рд▓реЗрдХрд┐рди рд╣рдореЗрд╢рд╛ рдирд╣реАрдВ (рдиреАрдЪреЗ рдЙрд╕ рдкрд░ рдЕрдзрд┐рдХ)
| рдЕрд╕рдВрднрд╡ - рд╕реНрдереИрддрд┐рдХ рд╡рд░реНрдЧреЛрдВ рдХреЛ рддреНрд╡рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рд╕реНрдерд┐рд░ рдХрдХреНрд╖рд╛рдУрдВ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ
|
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо
| рд╢рд╛рдпрдж рдмрд┐рдирд╛ рдХрд┐рд╕реА рдмрдВрджрд┐рд╢ рдХреЗ
| рдЙрд╕реА рдХрд╛рд░рдг рд╕реЗ рдЕрд╕рдВрднрд╡ рд╣реИ рдХрд┐ рд╡рд░реНрдЧ рдХреА рд╡рд┐рд░рд╛рд╕рдд рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ
|
рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛
| рд╕рдВрднрд╡рддрдГ рд╕рд┐рдВрдЧрд▓рдЯрди рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд╕реНрддреБ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ
| рдЧрд╛рдпрдм рд╣реИ
|
рд╡рд╕реНрддреБ рдЬреАрд╡рди рднрд░ рдХреА рдирд┐рдЧрд░рд╛рдиреА
| рд╢рд╛рдпрдж - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрд░рдВрднреАрдХрд░рдг рдореЗрдВ рджреЗрд░реА (рдпрд╛ рдорд╛рдВрдЧ рдкрд░ рдирд┐рд░реНрдорд╛рдг )
| рдЙрд╕реА рдХрд╛рд░рдг рд╕реЗ рдЕрд╕рдВрднрд╡ рд╣реИ рдХрд┐ рд╡рд░реНрдЧ рдХреА рд╡рд┐рд░рд╛рд╕рдд рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ
|
рдПрдХ рд╡рд░реНрдЧ рдХреЛ рддрддреНрдХрд╛рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдореВрд░реНрдд рдХрд╛рд░рдЦрд╛рдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
| рд╢рд╛рдпрдж
| рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреА рдХрдореА рдХреЗ рдХрд╛рд░рдг рдЕрд╕рдВрднрд╡
|
рдХреНрд░рдордмрджреНрдзрддрд╛
| рд╢рд╛рдпрдж
| рдЙрджрд╛рд╣рд░рдг рдХреЗ рдЕрднрд╛рд╡ рдореЗрдВ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реИред
|
рдКрдкрд░ рд╕реВрдЪреАрдмрджреНрдз рдорд╛рдирджрдВрдбреЛрдВ рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
рдкрд╣реБрдВрдЪ рдмрд┐рдВрджреБрдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛
рдмреЗрд╢рдХ, рд╣рдорд╛рд░рд╛ рдорддрд▓рдм
рдмрд╛рд╣рд░реА рдкрд╣реБрдВрдЪ рдмрд┐рдВрджреБ рд╣реИ, рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдПрдХ рд╡рд░реНрдЧ рдФрд░ рдЙрд╕рдХреЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреА рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЕрдиреБрдмрдВрдзред рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╣ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ:
"рдХреИрдиреЛрдирд┐рдХрд▓" рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╕рд┐рдВрдЧрд▓рдЯрди:
public class Session { private static Session _instance;
рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ:
public static class Session {
рд╡рд░реНрдЧ рдХреА рд╡рд┐рд░рд╛рд╕рдд
рд╕реНрдереИрддрд┐рдХ рд╡рд░реНрдЧреЛрдВ рдХреА рд╡рд┐рд░рд╛рд╕рдд рд╕рд░рд▓ рд╣реИ - рдпрд╣ рдХреЗрд╡рд▓ рднрд╛рд╖рд╛ рдХреЗ рд╕реНрддрд░ рдкрд░ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИред рд╕рд┐рдВрдЧрд▓рдЯрди рдХреЗ рд╕рд╛рде, рдЪреАрдЬреЗрдВ рдереЛрдбрд╝реА рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИрдВред рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рдиреА рдХреЗ рд▓рд┐рдП, рдХрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЕрдХреНрд╕рд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреИрдЯрд░реНрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
public class Singleton<T> where T : class { private static T _instance; protected Singleton() { } private static T CreateInstance() { ConstructorInfo cInfo = typeof(T).GetConstructor( BindingFlags.Instance | BindingFlags.NonPublic, null, new Type[0], new ParameterModifier[0]); return (T)cInfo.Invoke(null); } public static T Instance { get { if (_instance == null) { _instance = CreateInstance(); } return _instance; } } } public class Session : Singleton<Session> { public IUser GetUser() {
рдФрд░ рдЪреВрдВрдХрд┐ рд╕реА # рдФрд░ рдХрд┐рд╕реА рднреА рд╕реАрдПрд▓рдЖрдИ-рд╕рдВрдЧрдд рднрд╛рд╖рд╛ рдореЗрдВ рдПрдХрд╛рдзрд┐рдХ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдирд┐рд╖рд┐рджреНрдз рд╣реИ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдо рд╕рддреНрд░ рд╡рд░реНрдЧ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп
рдЙрдкрдпреЛрдЧреА рд╡рд░реНрдЧ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдирд╣реАрдВ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдПрдХрд▓ рдХреЗ рд▓рд┐рдП рдкрд╣реБрдВрдЪ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдирд╛ рд╣реИ:
public class Session : CoreObject { private Session() { } public static Session Instance { get { return Singleton<Session>.Instance; } } }
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо
рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЖрдк рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛рдкрди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдХреЛрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдкрд░реАрдХреНрд╖рдг рдХреНрд╖рдорддрд╛ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░, рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд, рд╡рд╕реНрддреБрдУрдВ
рдХреА рдордЬрдмреВрдд рдХрдиреЗрдХреНрдЯрд┐рд╡рд┐рдЯреА рд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВред рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ рд╡рд┐рд░рд╛рд╕рдд рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╕рд┐рдВрдЧрд▓рдЯрди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдирд┐рдпрдорд┐рдд рд╡рд░реНрдЧ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд╕ рдЕрд╡рд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ рдЬрдм рдЖрдк рдорд┐рд╢реНрд░рд┐рдд рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдПрдХрд▓ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдпрд╛ рдЗрд╕реЗ рд╡рд┐рджреЗрд╢реЛрдВ рдореЗрдВ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдорд┐рд╢реНрд░рд┐рдд рдкрд░рд┐рджреГрд╢реНрдп рдЙрджрд╛рд╣рд░рдг:
рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛
рд╕реНрдерд┐рд░ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ - рдЖрдк рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рдХрд╛рд░ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдпрд╣ рдмреЗрдХрд╛рд░ рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЬрдм рдкреНрд░рддрд┐рдмрд┐рдВрдм рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рд┐рдВрдЧрд▓рдЯрди рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХ рд╡рд╕реНрддреБ рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЙрджрд╛рд╣рд░рдг рд╣реИ:
рд╡рд╕реНрддреБ рдЬреАрд╡рди рднрд░ рдХреА рдирд┐рдЧрд░рд╛рдиреА
рдПрдХ рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рдХрд╛ рдЬреАрд╡рдирдХрд╛рд▓ рдбреЛрдореЗрди рдХреЗ рдЬреАрд╡рдирдХрд╛рд▓ рддрдХ рд╕реАрдорд┐рдд рд╣реЛрддрд╛ рд╣реИ - рдпрджрд┐ рд╣рдордиреЗ рдЗрд╕ рдбреЛрдореЗрди рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдмрдирд╛рдпрд╛ рд╣реИ, рддреЛ рд╣рдо рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рд╕рднреА рд╕реНрдерд┐рд░ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдЬреАрд╡рдирдХрд╛рд▓ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдЕрдкрдиреА рдЗрдЪреНрдЫрд╛рдиреБрд╕рд╛рд░ рд╕рд┐рдВрдЧрд▓рдЯрди рдХреЗ рдЬреАрд╡рдирдХрд╛рд▓ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рд╣рдбрд╝рддрд╛рд▓реА рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╢реБрд░реВ рдореЗрдВ рджреЗрд░реА рд╣реЛ рд░рд╣реА рд╣реИ:
public class Singleton<T> where T : class {
рдЖрдк рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдбрд┐рд▓реАрдЯ рдСрдкрд░реЗрд╢рди рднреА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:
public class Singleton<T> where T : class {
рдпрд╣ рдСрдкрд░реЗрд╢рди рдмреЗрд╣рдж рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдХреБрдЫ рд░рд╛рдЬреНрдп рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП, рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рд╕реЗ рдЗрд╕рдХреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдЕрд╡рд╛рдВрдЫрдиреАрдп рдкрд░рд┐рдгрд╛рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдлрд┐рд░ рднреА рдЗрд╕ рддрд░рд╣ рдХреА рд╡рд┐рдзрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЙрддреНрдкрдиреНрди рд╣реБрдИ (рдЬреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдбрд┐рдЬрд╛рдЗрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ), рддреЛ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рд╕рдВрднрд╛рд╡рд┐рдд рдмреБрд░рд╛рдИ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджреЗрдВ рдФрд░ рдХреБрдЫ рд╢рд░реНрддреЛрдВ рдХреЗ рддрд╣рдд рдЕрдВрджрд░ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ:
public class Singleton<T> where T : class {
рдПрдХ рд╡рд░реНрдЧ рдХреЛ рддрддреНрдХрд╛рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рд░ рдХрд╛рд░рдЦрд╛рдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рдПрдХ рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдПрдХ рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╕рд┐рдВрдЧрд▓рдЯрди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рджрд┐рдЦрддрд╛ рд╣реИ:
public interface IAbstractFactory { T Create<T>(); bool IsSupported<T>(); } public class Singleton<T> where T : class { private static T _instance; private static IAbstractFactory _factory; protected Singleton(IAbstractFactory factory) { _factory = factory; } public static T Instance { get { if (_instance == null) { _instance = _factory.Create<T>(); } return _instance; } } }
рд╕рдЪ рд╣реИ, рд╕рд┐рдВрдЧрд▓рдЯрди рдПрдХрддреНрд░реАрдХрд░рдг рдХреЗ рд╕рд╛рде рд╡реЗрд░рд┐рдПрдВрдЯ рдореЗрдВ, рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╕реБрдВрджрд░ рдФрд░ рдереЛрдбрд╝рд╛ рдмреЛрдЭрд┐рд▓ рд╕рдорд╛рдзрд╛рди рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ:
public class Session : CoreObject, ISession { private class SessionSingleton : Singleton<Session> { protected SessionSingleton() : base(new ConcreteFactory2()) { } } private Session() : base(new CoreContext()) { } public static Session Instance { get { return SessionSingleton.Instance; } }
рдХреНрд░рдордмрджреНрдзрддрд╛
рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬреЗрд╢рди рдХреЗрд╡рд▓ рдХрдХреНрд╖рд╛ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред рдПрдХ рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред
рддреЛ рдХреНрдпрд╛ рд╕рд┐рдВрдЧрд▓рдЯрди рдпрд╛ рд╕реНрдЯреЗрдЯрд┐рдХ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ?
рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдорд╛рдзрд╛рди рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдбреЗрд╡рд▓рдкрд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХрд╛рд░реНрдп рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдкрд░ рд╡рд╣ рд╣рд▓ рдХрд░ рд░рд╣рд╛ рд╣реИред рд▓реЗрдХрд┐рди, рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИ рдЬрдм:- рдХрдХреНрд╖рд╛рдПрдВ рдпрд╛ рдЗрдВрдЯрд░рдлреЗрд╕ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рд▓реЗрдиреЗ рдпрд╛ рдХрд╛рд░рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рд╕реМрдВрдкрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ
- рдЖрд╡рд╢реНрдпрдХ рд╡рд░реНрдЧ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ
- рд╡рд╕реНрддреБ рдХреЗ рдЬреАрд╡рдирдХрд╛рд▓ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдПрдХ рдПрдХрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рджреБрд░реНрд▓рдн рдХрд╛рд░реНрдп рд╣реИ)
- рд╡рд╕реНрддреБ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ (рдРрд╕рд╛ рдХрд╛рд░реНрдп рдХрд╛рд▓реНрдкрдирд┐рдХ рд░реВрдк рд╕реЗ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ)
рдЬрдм рдЖрдк рд╕рд┐рдВрдЧрд▓рдЯрди рдХреЗ рд▓рд┐рдП рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рд╕реА рднреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ
рд╕реНрдерд┐рд░ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИ ред рд╕реНрдереИрддрд┐рдХ рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢реНрдп рдЕрднреА рднреА рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ рд╕рдорд╛рди рд╡рд┐рдзрд┐рдпреЛрдВ, рд╕реНрдерд┐рд░рд╛рдВрдХ, рдХреНрд╖реЗрддреНрд░ рдФрд░ рдЧреБрдгреЛрдВ рдХреЗ рд╕рдореВрд╣рди рдореЗрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
System.Math ,
System.BitConverter ,
System.Buffer ,
System.Convert , рдЖрджрд┐ред