Skip to content

Instantly share code, notes, and snippets.

@DmitriiNazimov
Last active April 25, 2024 15:23
Show Gist options
  • Save DmitriiNazimov/40707966cf627205dcb53e4045f852ff to your computer and use it in GitHub Desktop.
Save DmitriiNazimov/40707966cf627205dcb53e4045f852ff to your computer and use it in GitHub Desktop.
[JS ES6 Паттерн ФАСАД (facade)] #js #ES6 #Паттерны #ООП
/**
*
* ПАТТЕРН ФАСАД
*
Предоставляет унифицированный интерфейс к группе интерфейсов подсистемы. Фасад определяет высокоуровневый интерфейс, упрощающий работу с подсистемой.
Превращает сложный интерфейс с множеством методов в простой интерфейс с минимум методов.
В данном случае интерфейс фасада компьюетра будет иметь всего 2 метода - вкл/выкл, при том что под капотом выполняется
12 методов.
Таким образом отделяется код клиента от кода реализации.
*/
class Computer {
getElectricShock() {
console.log('Ouch!')
}
makeSound() {
console.log('Beep beep!')
}
showLoadingScreen() {
console.log('Loading..')
}
bam() {
console.log('Ready to be used!')
}
closeEverything() {
console.log('Bup bup bup buzzzz!')
}
sooth() {
console.log('Zzzzz')
}
pullCurrent() {
console.log('Haaah!')
}
}
class Mouse {
launchIRLight () {
console.log('IR мышки горит')
}
launchBackLight () {
console.log('Декоративная подсветка мышки включена');
}
noPower () {
console.log('Мышка обесточена');
}
}
class Keyboard {
launchBackLight () {
console.log('Подсветка кнопок клавиатуры включена');
}
noPower () {
console.log('Клавиатура обесточена');
}
}
class ComputerFacade
{
constructor(computer, mouse, keyboard) {
this.computer = computer
this.mouse = mouse
this.keyboard = keyboard
if (!computer) {
throw new Error(`В ${this.constructor.name} не указан аргумент computer`);
}
if (!mouse) {
throw new Error(`В ${this.constructor.name} не указан аргумент mouse`);
}
if (!keyboard) {
throw new Error(`В ${this.constructor.name} не указан аргумент keyboard`);
}
}
turnOn() {
this.computer.getElectricShock()
this.computer.makeSound()
this.computer.showLoadingScreen()
this.mouse.launchIRLight()
this.mouse.launchBackLight()
this.keyboard.launchBackLight()
this.computer.bam()
}
turnOff() {
console.log('Выключение компьютера запущено');
this.computer.closeEverything()
this.computer.pullCurrent()
this.computer.sooth()
this.mouse.noPower()
this.keyboard.noPower()
}
}
const computer = new ComputerFacade(new Computer(), new Mouse(), new Keyboard())
computer.turnOn() // Ouch! Beep beep! Loading.. Ready to be used!
computer.turnOff() // Bup bup buzzz! Haah! Zzzzz
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment