рд╢реБрдн рджрд┐рди, рджреЛрд╕реНрддреЛрдВ!рд▓рдЪреАрд▓реЗрдкрди рдФрд░ рджрдХреНрд╖рддрд╛ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдзреЛрдВ рдХреА рдмрдбрд╝реА рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рдбрд┐рдЬрд╛рдЗрди рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдЗрдП рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЛ рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рджреЗрдЦреЗрдВредрд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ, рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдмрд╕реЗ рдЖрдо рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдФрд░ рдХреАрдбрд╝реЗ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рд▓рдВрдмреЗ рд╕рдордп рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рдХреА рдЧрдИ рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдУрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВредрдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рдкреИрдЯрд░реНрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред рд╡реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рддрд░реАрдХрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╣реИрдВредрд╕рдмрд╕реЗ рдЖрдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреИрдЯрд░реНрди рд╣реИрдВ:- рдЕрдиреБрдХреВрд▓рдХ
- рдбреЗрдХреЛрд░реЗрдЯрд░
- рдореБрдЦреМрдЯрд╛
- рдЕрдиреБрдХреВрд▓реА (рд▓рд╛рдЗрдЯрд╡реЗрдЯ (рддрддреНрд╡), рдлреНрд▓рд╛рдИрд╡реЗрдЯ)
- рдкреНрд░рддрд┐рдирд┐рдзрд┐
рдЕрдиреБрдХреВрд▓рдХ
рдЕрдбреИрдкреНрдЯрд░ рдПрдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рд╡рд░реНрдЧ рд╕реЗ рджреВрд╕рд░реЗ рд╡рд░реНрдЧ рдХреЗ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рдЯреНрд░рд╛рдВрд╕рдлрд░ (рдЯреНрд░рд╛рдВрд╕рдлрд░) рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдЕрд╕рдВрдЧрдд рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг рдЕрдХреНрд╕рд░ рдЕрд╕рдВрднрд╡ рд╣реЛрддрд╛ рд╣реИредрдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рдЯрд╛рд░реНрдЧрд░рд┐рдпрди рдиреЗ рдЕрдкрдиреЗ рдирд┐рдкрдЯрд╛рди (рдлреНрд▓реЙрд▓реЗрд╕ рдФрд░ рдбреНрд░реЗрдЧрди) рдореЗрдВ рд╕рднреА рдмрд▓реЛрдВ рдХреЗ рд╕рд╛рде рд▓рдбрд╝рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдФрд░ рдбреЗрдиреЗрд░рд┐рдЬрд╝ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рддрд▓рд╛рд╢ рд░рд╣реЗ рд╣реИрдВредрд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:- рдЕрд╕рдВрд╕рджреАрдп рд╡рд░реНрдЧ
- рдбреНрд░реИрдЧрди рдХреНрд▓рд╛рд╕
- рдбреНрд░реИрдЧрди рдХреНрд▓рд╛рд╕ рдмрд░реНрди рдореЗрдердб рдЯреВ рдХрд┐рд▓ рдХреЙрдорди рдореЗрдердб рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдбреЙрдкреНрдЯрд░ рдХреНрд▓рд╛рд╕
class Unsullied {
constructor(name) {
this.name = name
this.kill = this.kill.bind(this)
}
kill() {
console.log(`Unsullied ${this.name} kill`)
}
}
class Dragon {
constructor(name) {
this.name = name
this.burn = this.burn.bind(this)
}
burn() {
console.log(`Dragon ${this.name} burn`)
}
}
class DragonAdapter extends Dragon {
kill() {
this.burn()
}
}
(() => {
const Army = [
new DragonAdapter('Rhaegal'),
new Unsullied('Grey worm'),
new DragonAdapter('Drogon')
]
Army.forEach(soldier => soldier.kill())
})()
рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ
- рдЬрдм рдирдП рдШрдЯрдХреЛрдВ рдпрд╛ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдореМрдЬреВрджрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдЬрдм рд░реАрдлрд╝реИрдХреНрдЯрд░рд┐рдВрдЧ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдХреЛрдб рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╕реБрдзрд╛рд░ рд╣реБрдЖ рд╣реИ, рд▓реЗрдХрд┐рди рдкреБрд░рд╛рдиреЗ рднрд╛рдЧреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред
- рдЬрдм рдЖрдкрдХреЛ рджреНрд╡рд┐рддреАрдпрдХ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдорд┐рд▓рд╛ рдФрд░ рдЖрдк рдЗрд╕реЗ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдбреЗрдХреЛрд░реЗрдЯрд░
рдПрдХ рдбреЗрдХреЛрд░реЗрдЯрд░ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╣реИ рдЬрд┐рд╕реЗ рдореМрдЬреВрджрд╛ рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдпрд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдЙрдкрд╡рд░реНрдЧ рдХрд╛ рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИредрдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдо рдЬрд╛рдВрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд░рд╛рдЬрд╛ рдЬреЛрдлреНрд░реЗ рдХреЛ рджрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдкреЗрдп рдЬрд╣рд░ рд╣реИредрд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:- рд░рд╛рдЬрд╛ рд╡рд░реНрдЧ
- рдХрд┐рдВрдЧ рдЬреЛрдлреНрд░реЗ рдЙрджрд╛рд╣рд░рдг
- рдкреАрдиреЗ рдХрд╛ рд╡рд░реНрдЧ
- рдХрдХреНрд╖рд╛ рдЬрд╣рд░ рдкреА рд▓рд┐рдпрд╛
- рд░рд╛рдЬрд╛ рдХреЗ рдЬреАрд╡рди рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рднреА рдХрд╛рд░реНрдп рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛
function isNotPoisoned(t, n, descriptor) {
const original = descriptor.value
if(typeof original === 'function') {
descriptor.value = function(...args) {
const [drink] = args
if(drink.constructor.name === 'poisonedDrink') throw new Error('Someone wants to kill the king')
return original.apply(this, args)
}
}
return descriptor
}
class PoisonedDrink {
constructor(name) {
this.name = name
}
}
class Drink {
constructor(name) {
this.name = name
}
}
class King {
constructor(name) {
this.name = name
}
@isNotPoisoned
drink(drink) {
console.log(`The king drank ${drink}`)
}
}
(() => {
const joffrey = new King('Joffrey Baratheon')
const normalDrink = new Drink('water')
const poisonedDrink = new Drink('poisoned water')
joffrey.drink(normalDrink)
joffrey.drink(poisonedDrink)
})()
рдбреЗрдХреЛрд░реЗрдЯрд░ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓реЗ
- рдЬрдм рд╣рдо рд╡рд┐рднрд┐рдиреНрди рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рд╕рд╛рде рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡рд░реНрдЧреЛрдВ рдпрд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ
- рдЬрдм рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рдмрдирд╛рдИ рдЧрдИ рдХрдХреНрд╖рд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкреВрд░реНрдг рд░реАрдлрд╝реИрдХреНрдЯрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕рдордп рдирд╣реАрдВ рд╣реИ
рдореБрдЦреМрдЯрд╛
рдореБрдЦреМрдЯрд╛ - рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдЯреЗрдореНрдкрд▓реЗрдЯред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рдПрдХреАрдХреГрдд рдФрд░ рд╕рд░рд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдФрд░ рдЗрд╕рдХреЗ рд╕рдмрд╕рд┐рд╕реНрдЯрдо рдпрд╛ рдЙрдкрд╡рд░реНрдЧреЛрдВ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредрдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рд╣рдо рдмрд░реНрдмрд░ рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рд▓рдбрд╝рд╛рдИ рдореЗрдВ рдПрдХ рд╕реЗрдирд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реА рд╕реЗрдирд╛ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдШреБрдбрд╝рд╕рд╡рд╛рд░ рд╕реЗрдирд╛, рд╕реИрдирд┐рдХреЛрдВ рдФрд░ рджрд┐рдЧреНрдЧрдЬреЛрдВ рдХреЛ рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЗрди рддрд░реАрдХреЛрдВ рдХреЛ рдЕрд▓рдЧ рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред рд╣рдо рд╕реЗрдирд╛ рдкреНрд░рдмрдВрдзрди рдХреЛ рдХреИрд╕реЗ рдЖрд╕рд╛рди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ?рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:- рд╕реЗрдирд╛ рдХреЗ рдирдореВрдиреЗ
- рд╕реЗрдирд╛рдлреИрдб рд╡рд░реНрдЧ
class Horse {
constructor(name) {
this.name = name
}
attack() {
console.log(`Infantry ${this.name} attack`)
}
}
class Soldier {
constructor(name) {
this.name = name
}
attack() {
console.log(`Soldier ${this.name} attack`)
}
}
class Giant {
constructor(name) {
this.name = name
}
attack() {
console.log(`Giant ${this.name} attack`)
}
}
class ArmyFacade {
constructor() {
this.army = [];
(new Array(10)).fill().forEach((_, i) => this.army.push(new Horse(i + 1)));
(new Array(10)).fill().forEach((_, i) => this.army.push(new Soldier(i + 1)));
(new Array(1)).fill().forEach((_, i) => this.army.push(new Giant(i + 1)));
this.getByType = this.getByType.bind(this)
}
getByType(type, occurency) {
return this.army.filter(el => {
return el.constructor.name === type && occurency-- > 0
})
}
attack(armyInfo = {}) {
const keys = Object.keys(armyInfo)
let subArmy = []
keys.forEach(soldier => {
switch(soldier) {
case 'horse': {
subArmy = [...subArmy, ...this.getByType('Horse', armyInfo.horse)]
break;
}
case 'soldier': {
subArmy = [...subArmy, ...this.getByType('Soldier', armyInfo.soldier)]
break;
}
case 'giant': {
subArmy = [...subArmy, ...this.getByType('Giant', armyInfo.giant)]
break;
}
}
})
subArmy.forEach(soldier => soldier.attack())
}
}
(() => {
const army = new ArmyFacade()
army.attack({
horse: 3,
soldier: 5,
giant: 1
})
})()
рдмрдХреНрд╕реЛрдВ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ
- рдЬрдм рд╣рдо рдХреЛрдб рдХреА рдХрдИ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрднрд╡рддрдГ рджреЛрд╣рд░рд╛рддреЗ рд╣реБрдП, рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдлрд╝рдВрдХреНрд╢рди рдореЗрдВред
рдЕрд╡рд╕рд░рд╡рд╛рджреА
рдЕрдиреБрдХреВрд▓реА - рдХрдИ рдЫреЛрдЯреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдмреАрдЪ рдХреБрд╢рд▓ рдбреЗрдЯрд╛ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдФрд░ рдореЗрдореЛрд░реА рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредрдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдо рд╕рдлреЗрдж рд╡реЙрдХрд░реЛрдВ рдХреА рдПрдХ рд╕реЗрдирд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЙрд╕реА рд╕рдордп, рд╣рдорд╛рд░реЗ рд╡реЙрдХрд░ рдореЗрдВ рддреАрди рдЕрд╡рд╕реНрдерд╛рдПрдБ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ:- рдЬрд╝рд┐рдВрджрд╛
- рдореГрдд
- рдкреБрдирд░реНрдЬреАрд╡рд┐рдд
рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:- рд╢реНрд╡реЗрддрд╡рд░реНрдгреА рд╡рд░реНрдЧ
- рд╡рд░реНрдЧ рд╡реНрд╣рд╛рдЗрдЯрд╡рд▓реНрдХрд░рдлреНрд▓рд╛рдЗрдЯ
- рд╕рдлреЗрдж рд╡реЙрдХрд░ рдХреЗ рдкреБрдирд░реБрддреНрдерд╛рди рдХреЗ рд▓рд┐рдП рдЧреНрд░рд╛рд╣рдХ
class WhiteWalker {
constructor({
sprite,
someOtherBigInformation
}) {
this.sprite = sprite
this.someOtherBigInformation = someOtherBigInformation
this.state = 'alive'
this.resurrect = this.resurrect.bind(this)
this.kill = this.kill.bind(this)
this.getState = this.getState.bind(this)
}
kill() {
this.state = 'dead'
}
resurrect() {
this.state = 'resurrected'
}
getState() {
return this.state
}
}
const whiteWalker = new WhiteWalker({
sprite: Date.now()
})
class WhiteWalkerFlyweight {
constructor(position, name) {
this.position = position
this.name = name
this.whiteWalker = whiteWalker
}
getInfo() {
console.log(`The White Walker ${this.name} whit sprite ${this.whiteWalker.sprite} is ${this.whiteWalker.state}`)
}
getFatherInstance() {
return this.whiteWalker
}
}
(() => {
const myArmy = []
for(let i = 0; i < 10; i++) {
myArmy.push(new WhiteWalkerFlyweight({
x: Math.floor(Math.random() * 200),
y: Math.floor(Math.random() * 200),
}, i + 1))
}
myArmy.forEach(soldier => soldier.getInfo())
console.log('KILL ALL')
const [onOffWhiteWalker] = myArmy
onOffWhiteWalker.getFatherInstance().kill()
myArmy.forEach(soldier => soldier.getInfo())
console.log('RESURRECT ALL')
onOffWhiteWalker.getFatherInstance().resurrect()
myArmy.forEach(soldier => soldier.getInfo())
})()
рдмрдХреНрд╕реЛрдВ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ
- рдЬрдм рд╣рдо рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ
- рдЬрдм рд╣рдо рдРрд╕реА рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рд╕реНрдореГрддрд┐ рдХреА рдПрдХ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рддреА рд╣реИрдВ
- рдЬрдм рд╣рдореЗрдВ рдРрд╕реА рд╡рд╕реНрддреБрдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬрд┐рдирдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдЬрдЯрд┐рд▓ рдЧрдгрдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ
- рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рд╕реАрдорд┐рдд рдЖрдкреВрд░реНрддрд┐ рд╣реЛрддреА рд╣реИ: рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдкрд╛рд╡рд░, рдореЗрдореЛрд░реА, рд╕реНрдкреЗрд╕ рдЗрддреНрдпрд╛рджрд┐ред
рдкреНрд░реЙрдХреНрд╕реА
рдкреНрд░реЙрдХреНрд╕реА рдЯреЗрдореНрдкрд▓реЗрдЯ, рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕рдХреЗ рдирд╛рдо рдХрд╛ рдЕрд░реНрде рд╣реИ, рдХрд╛ рдЙрдкрдпреЛрдЧ рдРрдб-рдЗрди рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рддрдХ рдкрд╣реБрдВрдЪ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредрдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рд░рд╛рдиреА Cersei рдиреЗ рдЙрд╕рдХреА рдЕрдиреБрдорддрд┐ рдХреЗ рдмрд┐рдирд╛ 100 рд╕реЗ рдЕрдзрд┐рдХ рд╕реИрдирд┐рдХреЛрдВ рдХреА рднрд░реНрддреА рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рд▓рдЧрд╛рдиреЗ рдХрд╛ рдлрд░рдорд╛рди рдЬрд╛рд░реА рдХрд┐рдпрд╛ред рд╣рдо рдЗрд╕реЗ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗ?рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:- рд╡рд░реНрдЧ рд╕реИрдирд┐рдХ
- рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП рд╕реЗрдирд╛рдкреНрд░реЙрдХреНрд╕реА рд╡рд░реНрдЧ
- рдЕрдиреБрдорддрд┐ рдХреЗ рд▓рд┐рдП рд╕реЗрд░реЗрд╕реА рд╡рд░реНрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг
class Soldier {
constructor(name) {
this.name = name
}
attack() {
console.log(`Soldier ${this.name} attack`)
}
}
class Queen {
constructor(name) {
this.name = name
}
getConsent(casualNumber) {
return casualNumber %2 === 0
}
}
class ArmyProxy {
constructor() {
this.army = []
this.available = 0
this.queen = new Queen('Cercei')
this.getQueenConsent = this.getQueenConsent.bind(this)
}
getQueenConsent() {
return this.queen.getConsent(Math.floor(Math.random() * 200))
}
enrollSoldier() {
if(!this.available) {
const consent = this.getQueenConsent()
if(!consent) {
console.error(`The queen ${this.queen.name} deny the consent`)
return
}
this.available = 100
}
this.army.push(new Soldier(this.army.length))
this.available--
}
}
(() => {
const myArmy = new ArmyProxy()
for(let i = 0; i < 1000; i++) {
myArmy.enrollSoldier()
}
console.log(`I have ${myArmy.army.length} soldiers`)
})()
рдмрдХреНрд╕реЛрдВ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ
- рдЬрдм рд╣рдо рдЬрд┐рд╕ рд╡рд╕реНрддреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡рд╣ рдмрд╣реБрдд рджреВрд░ рд╣реИ (рдЧрд╣рд░рд╛рдИ рд╕реЗ рдиреЗрд╕реНрдЯреЗрдб) тАЛтАЛрдФрд░ рдкреНрд░реЙрдХреНрд╕реА рдХреЛ рд▓реЙрдЬрд┐рдХ рдореЗрдВ рд╕реЗрд╡ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рди рдХрд░реЗрдВ
- рдЬрдм рд╣рдо рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдгрд╛рдо рдХреА рдкреНрд░рддреНрдпрд╛рд╢рд╛ рдореЗрдВ рдПрдХ рдЕрдиреБрдорд╛рдирд┐рдд рдкрд░рд┐рдгрд╛рдо рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреА рдЧрдгрдирд╛ рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ
- рдЬрдм рд╣рдо рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреА рдкрд╣реБрдВрдЪ рдпрд╛ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдЙрд╕рдХреЗ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд┐рдП рдмрд┐рдирд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ
рдЧрд┐рдердм
рдХреЛрдб редрдзреНрдпрд╛рди рджреЗрдВ рдЯреНрд░рд╛рдВрд╕: рдпрд╣рд╛рдВ рдбрд┐рдЬрд╛рдЗрди рдкреИрдЯрд░реНрди рдкрд░ рдПрдХ рд╢рд╛рдирджрд╛рд░ рд╡реАрдбрд┐рдпреЛ рд╣реИ редрдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред