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