рд░рдгрдиреАрддрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрдкрдпреЛрдЧ

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

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

рддреЛ рдЪрд▓рддреЗ рд╣реИрдВ?

рд░рдгрдиреАрддрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред

рд░рдгрдиреАрддрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреА рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдкрд░рд┐рднрд╛рд╖рд╛


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

рд░рдгрдиреАрддрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрджрд╛рд╣рд░рдг


  • рд╕реЙрд░реНрдЯрд┐рдВрдЧ: рд╣рдо рдЗрди рдирдВрдмрд░реЛрдВ рдХреЛ рд╕реЙрд░реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдмреНрд░рд┐рдХреЙрд░реНрдЯ, рдмрдмрд▓реЛрд░реНрдЯ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдПрдХ рдкреЗрдЬ рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рддрддреНрд╡реЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрдИ рдЪреАрдЬреЗрдВ "рд▓реЛрдХрдкреНрд░рд┐рдп" рд╣реЛ рд╕рдХрддреА рд╣реИрдВ (рдЕрдзрд┐рдХрд╛рдВрд╢ рд╡рд┐рдЪрд╛рд░, рдЕрдзрд┐рдХрд╛рдВрд╢ рдЧреНрд░рд╛рд╣рдХ, рд╕реГрдЬрди рдХреА рддрд╛рд░реАрдЦ, рдЕрдзрд┐рдХрд╛рдВрд╢ рдЧрддрд┐рд╡рд┐рдзрд┐, рдХрдо рд╕реЗ рдХрдо рдЯрд┐рдкреНрдкрдгреА)ред рдорд╛рдорд▓реЗ рдореЗрдВ рдкреНрд░рдмрдВрдзрди рдХреЛ рдЕрднреА рддрдХ рдпрд╣ рдирд╣реАрдВ рдкрддрд╛ рд╣реИ рдХрд┐ рдСрд░реНрдбрд░ рдХреИрд╕реЗ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдмрд╛рдж рдХреА рддрд╛рд░реАрдЦ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдСрд░реНрдбрд░ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдСрд░реНрдбрд░ рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (IOrderAl рдПрд▓реНрдЧреЛрд░рд┐рдердо рдпрд╛ рдХреБрдЫ рдФрд░) рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдСрд░реНрдбрд░ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛ IOrderAl рдПрд▓реНрдЧреЛрд░рд┐рдердо рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдареЛрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдЖрджреЗрд╢ рдХреЛ рд╕реМрдВрдкрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред ред рдЖрдк CommentOrderer, ActivOrderer рдЗрддреНрдпрд╛рджрд┐ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдирдИ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ рдкреНрд░рдХрдЯ рд╣реЛрдиреЗ рдкрд░ рдмрд╕ рдЙрдиреНрд╣реЗрдВ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
  • рд╡рд┐рд╖рдо рд╡рд╕реНрддреБрдУрдВ (рдХрддрд╛рд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рдбреЗрдЯрд╛ рдХреЛ рдмрдЪрд╛рдиреЗ) рд╕реЗ рдПрдХ рдХрддрд╛рд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг: рдПрдХ рдЙрджрд╛рд╣рд░рдг рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рд╕рд┐рд╕реНрдЯрдо рд╣реЛрдЧрд╛ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдбреЗрдЯрд╛ рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЬрдорд╛ рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ рдХрддрд╛рд░ рд╕реЗ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдирд┐рдХрд╛рд▓рдиреЗ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЧреБрдгреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЪрдпрди рд░рдгрдиреАрддрд┐ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  • рдорд╛рдиреНрдпрдХрд░рдг рд╣рдореЗрдВ "рдХреБрдЫ рдирд┐рдпрдо" рдХреЗ рдЕрдиреБрд╕рд╛рд░ рддрддреНрд╡реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рддрдХ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдирд┐рдпрдо рдХреНрдпрд╛ рд╣реЛрдЧрд╛, рдФрд░ рд╣рдо рдирдП рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВред
  • рдкреНрд░рдорд╛рдгреАрдХрд░рдг: рдмреЗрд╕рд┐рдХ, рдбрд╛рдЗрдЬреЗрд╕реНрдЯ, рдУрдкрдирдЖрдИрдбреА, рдУрдПрде рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдмреАрдЪ рдПрдХ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд░рдгрдиреАрддрд┐ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред

рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

interface AuthStrategy {
    auth(): void;
}
class Auth0 implements AuthStrategy {
    auth() {
        log('Authenticating using Auth0 Strategy')
    }
}
class Basic implements AuthStrategy {
    auth() {
        log('Authenticating using Basic Strategy')
    }
}
class OpenID implements AuthStrategy {
    auth() {
        log('Authenticating using OpenID Strategy')
    }
}

class AuthProgram {
    private _strategy: AuthStrategy
    use(strategy: AuthStrategy) {
        this._strategy = strategy
        return this
    }
    authenticate() {
        if(this._strategy == null) {
            log("No Authentication Strategy set.")
        }
        this._strategy.auth()
    }
    route(path: string, strategy: AuthStrategy) {
        this._strategy = strategy
        this.authenticate()
        return this
    }
}

  • (games): тАФ , , , , , , , . , , , , . ┬л┬╗, ┬л┬╗, ┬л┬╗ Attack() . , ┬л┬╗, ┬л┬╗, ┬л┬╗, ┬л ┬╗ Attack ().
  • (storing information): , , -. , PDF, , . , ; , , A, B C, . PDF , / PDF. , , , , , , B C, , A. , . PDF, , , . . Dependency Injection ┬л / ┬╗ ( , ), , , , , . , ( , ), , , , . ┬л ┬╗, ┬лcleanUp┬╗ , , , , .
  • (outputting): X , CSV, XML, JSON .
  • (invoicing): - , , - .
  • (navigation): .
  • (logging): Log4Net Log4j , Appenders, Layouts, and Filters.
  • рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди: рдЫреЛрдЯреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЗрди-рдореЗрдореЛрд░реА рд░рдгрдиреАрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рдкреВрд░реА рдлрд╝рд╛рдЗрд▓ рдкрдврд╝реА рдЬрд╛рддреА рд╣реИ рдФрд░ рдореЗрдореЛрд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА рдЬрд╛рддреА рд╣реИ (рдЬреИрд╕реЗ, рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП <1 рдЬреАрдмреА)ред рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ рдЕрд▓рдЧ рд░рдгрдиреАрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдкрд░рд┐рдгрд╛рдо tmp рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреЗ рд╣реИрдВред рдпреЗ рдПрдХ рд╣реА рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░рдгрдиреАрддрд┐рдпрд╛рдБ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред

рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

//   ""
interface  Cipher  {
     public void performAction();
}

class InMemoryCipherStrategy implements Cipher { 
         public void performAction() {
             //   byte[] ....
         }
}

class SwaptToDiskCipher implements Cipher { 
         public void performAction() {
             //     .... 
         }

}

//   
File file = getFile();
Cipher c = CipherFactory.getCipher( file.size());
c.performAction();

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

Shape redCircle = new RedCircle(); //    ┬л┬╗
Shaped redCircle = new Shape("red","circle"); //   ┬л┬╗

рдареЛрд╕ рдФрд░ рд░рдгрдиреАрддрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


"рд░рдгрдиреАрддрд┐" рдЯреЗрдореНрдкрд▓реЗрдЯ рд╣рд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реИ? рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдлреНрд▓реИрдЯ рдХреЛрдб IF рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╣реИ ...ред рдпрд╣ ... ... рдЗрд╕рдХреЗ рд╡рд╕реНрддреБ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ред

рдЧрдВрджреЗ рдлреНрд▓реИрдЯ рдХреЛрдб рдХрд╛ рдЙрджрд╛рд╣рд░рдг (рдЧрд▓рдд):

class Document {...}
class Printer {
    print(doc: Document, printStyle: Number) {
        if(printStyle == 0 /*   */) {
            // ...
        }
        if(printStyle == 1 /*  */) {
            // ...            
        }
        if(printStyle == 2 /*     */) {
            // ...
        }
        if(printStyle == 3 /*     */) {
            // ...            
        }
        if(printStyle == 4 /*     */) {
            // ...
        }
        // ...
    }
}

"рд░рдгрдиреАрддрд┐" рдЯреЗрдореНрдкрд▓реЗрдЯ (рд╕рд╣реА рдврдВрдЧ рд╕реЗ) рдХреЗ рд╕рд╛рде рд╕рдорд╛рди рдХреЛрдб рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:

class Document {...}
interface PrintingStrategy {
    printStrategy(d: Document): void;
}
class ColorPrintingStrategy implements PrintingStrategy {
    printStrategy(doc: Document) {
        log(" ")
        // ...
    }
}
class InvertedColorPrintingStrategy implements PrintingStrategy {
    printStrategy(doc: Document) {
        log("  ")
        // ...
    }
}
class Printer {
    private printingStrategy: PrintingStrategy
    print(doc: Document) {
        this.printingStrategy.printStrategy(doc)
    }
}

рдПрд╕рдУрдПрд▓рдЖрдИрдбреА рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд░рдгрдиреАрддрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд╕рд╣реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред

//  /
interface LockOpenStrategy {
    open();
    lock();
}
//      
class RetinaScannerLockOpenStrategy implements LockOpenStrategy {
    open() {
        //...
    }
    lock() {
        //...
    }
}

//       
class KeypadLockOpenStrategy implements LockOpenStrategy {
    open() {
        if(password != ""){
            log("Entry Denied")
            return
        }
        //...
    }
    lock() {
        //...
    }
}
//        .
abstract class Door {
    public lockOpenStrategy: LockOpenStrategy
}
//   .
class GlassDoor extends Door {}
//    .
class MetalDoor extends Door {}
//       .
class DoorAdapter {
    openDoor(d: Door) {
        d.lockOpenStrategy.open()
    }
}

рдиреАрдЪреЗ рддрд░реНрдХ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╣реИред

var glassDoor = new GlassDoor(); //   
glassDoor.lockOpenStrategy = new RetinaScannerLockOpenStrategy(); //         
var metalDoor = new MetalDoor(); //     
metalDoor.lockOpenStrategy = new KeypadLockOpenStrategy(); //      .
var door1 = new DoorAdapter().openDoor(glassDoor); //    . 
var door2  = new DoorAdapter().openDoor(metalDoor); //    . 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдКрдкрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдХреЛрдб рд╣реИ рдЬреЛ рдЖрдИрдПрдл ... рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╢реИрд▓реА рдХреЛ рдмрд╛рд╣рд░ рдХрд░рддрд╛ рд╣реИ ред ELSE ....... рдпрд╛ SWITCH ... рдорд╛рдорд▓рд╛ ...

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

рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдФрд░ рд░рдгрдиреАрддрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯ


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

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

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рдпрд╣ рдЪрдпрди рдЖрдкрдХреЛ рд░рдгрдиреАрддрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдЪрд┐рдд рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред
рдореБрдЭреЗ рдЦреБрд╢реА рд╣реЛрдЧреА рдпрджрд┐ рдЖрдк рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЗрд╕ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдЕрдзрд┐рдХ рдЙрджрд╛рд╣рд░рдг рджреЗ рд╕рдХрддреЗ рд╣реИрдВред

рд╣реИрдкреНрдкреА рдХреЛрдбрд┐рдВрдЧ, рджреЛрд╕реНрддреЛрдВ рдФрд░ рд╕рд╣рдХрд░реНрдорд┐рдпреЛрдВ!

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


All Articles