Можете дать пример для использование паттерна декоратор?

Делаю домашку по паттерну декоратор. Сам паттерн знаю отлично, можете дать пример для его использование.
  • Вопрос задан
  • 202 просмотра
Решения вопроса 2
sarapinit
@sarapinit
Точу водой камень
Кэширование, например удобно делать. В декораторе идем в кэш, если не получилось вызываем метод из основного класса.
Логику ретраев тоже можно в него положить
Ответ написан
Maksclub
@Maksclub
maksfedorov.ru
Пример на псевдокоде

UserProvider userProvider = new UserProviderAggregate(
     new LoggerUserProviderDecorator(
          new CacheUserProviderDecorator(
              new UserProvider(...)
              new Cache(),
         ),
         new Logger(),
     ),
     new DummyUserProvider()
)


все классы UserProviderAggregate, LoggerUserProviderDecorator, CacheUserProviderDecorator, DummyUserProvider и UserProvider реализуют UserProviderInterface... по сути представляют из себя реализации этой абстракции

Просто каждый передает внутренней зависимости этого же типа (UserProviderInterface) работу внутри своей реализации метода этой абстракции

public function loadUsers(): Collection<User> {
     return new Collection<User>(...);
}


или cache:
public function loadUsers(): Collection<User> {
     if(cache.has('cache_users_key')) {
        return cache.get('cache_users_key');
    }

    Collection<User> users = new Collection<User>(...)

    cache.put('cache_users_key', users)

    return users;
}


или агрегированные:
public function loadUsers(): Collection<User> {
     if(...any condition) {
         return dbUsers.loadUsers();
     }

     if(...any condition) {
         return dummyUsers.loadUsers();
     }

     throw new Exception();
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
BorLaze
@BorLaze
Java developer
Вот тут неплохое объяснение.

Вообще, на этом сайте по паттернам довольно хорошие примеры - и не сильно много текста, и в то же время достаточно подробно рассказывается, как, когда и почему нужно использовать тот или иной шаблон.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы