Proxy

(замісник)

структурний патерн 

Задача

           Забезпечити певну додаткову логіку

  • обмежити доступ до основного об'єкта
  • вести логування
  • виконувати кешування
  • інше

Проблема

В нас є двері в офіс, їх задача нас впускати, але ж не всі повинні ходити

Рішення

Встановити кодовий замок

interface iDoor {
    open(): void
    close(): void
} 
 
class SocialTechDoor implements iDoor {
    open() {
        console.log('Opening door')
    }
 
    close() {
        console.log('Closing door')
    }
}
class SecurityDoor implements iDoor {
    constructor(door: iDoor) {
        this.door = door
    }
 
    private authenticate(password): boolean {
        return password === 'pots'
    }

    public open(password): void {
        if (this.authenticate(password)) {
            this.door.open()
        } else {
            console.log('Пшол вон')
        }
    }
 
    public close(): void {
        this.door.close()
    }
}
const door = new SecurityDoor(
    new SocialTechDoor()
)

door.open('invalid') // Пшол вон
door.open('pots') // Саня, захади
door.close()      // Да-да, Рамира не пускай)

Щось схоже на декоратор?

  • Так в них схожі структури, але різні призначення
  • Декоратор надає розширений інтерфейс, замісник той же самий
  • Вони обидва побудовані на композиції та делегуванні роботи іншому об’єкту
  • Патерни відрізняються тим, що Замісник сам керує життям сервісного об’єкта, а обгортання Декораторів контролюється клієнтом.

Де ми можемо використовувати?

  • Кешування сервіса
  • Логування
  • Перехват івентів поки фетчимо сервіс
  • ...

Proxy

By Kolya Koval

Proxy

  • 287