Дисциплины - Объектно-ориентированное программирование

Шаблоны проектирования практических задач - Структурные шаблоны проектирования - Заместитель

Заместитель (англ. Proxy) — структурный шаблон проектирования, предоставляющий объект, который контролирует доступ к другому объекту, перехватывая все вызовы (выполняет функцию контейнера).

Пример на PHP

/// Subject - субъект

/// определяет общий для Math и "Proxy" интерфейс, так что класс
/// "Proxy" можно использовать везде, где ожидается 
interface IMath
{
    function Add($x, $y);
    function Sub($x, $y);
    function Mul($x, $y);
    function Div($x, $y);
}
 
 

  /// RealSubject - реальный объект
  /// определяет реальный объект, представленный заместителем

  class Math implements IMath
  {
    public function __construct()
    {
        print ("Create object Math. Wait...");
        sleep(5);
    }
 
    public function  Add($x, $y){return $x + $y;}
    public function  Sub($x, $y){return $x - $y;}
    public function  Mul($x, $y){return $x * $y;}
    public function  Div($x, $y){return $x / $y;}
  }
 

  /// Proxy - заместитель
  /// хранит ссылку, которая позволяет заместителю обратиться к реальному
  /// субъекту. Объект класса "MathProxy" может обращаться к объекту класса
  /// "Math", если интерфейсы классов "Math" и "IMath" одинаковы;
  /// предоставляет интерфейс, идентичный интерфейсу "IMath", так что заместитель
  /// всегда может быть предоставлен вместо реального субъекта;
  /// контролирует доступ к реальному субъекту и может отвечать за его создание 
  /// и удаление;
  /// прочие обязанности зависят от вида заместителя:
  /// удаленный заместитель отвечает за кодирование запроса и его аргументов
  /// и отправление закодированного запроса реальному субъекту в
  /// другом адресном пространстве;
  /// виртуальный заместитель может кэшировать дополнительную информацию
  /// о реальном субъекте, чтобы отложить его создание.
  /// защищающий заместитель проверяет, имеет ли вызывающий объект 
  /// необходимые для выполнения запроса права;
  class MathProxy implements IMath
  {
    protected $math;
 
    public function __construct()
    {
      $this->math = null;
    }
    /// Быстрая операция - не требует реального субъекта
    public function Add($x, $y)
    {
      return $x + $y;
    }

    public function  Sub($x, $y)
    {
      return $x - $y;
    }
 
 
    /// Медленная операция - требует создания реального субъекта
    public function Mul($x, $y)
    {
      if ($this->math == null)
          $this->math = new Math();
      return $this->math->Mul($x, $y);
    }
 
    public function Div($x, $y)
    {
      if ($this->math == null)
          $this->math = new Math();
      return $this->math->Div($x, $y);
    }
  }
  $p = new MathProxy;
 
  // Do the math
  print("4 + 2 = ".$p->Add(4, 2));
  print("4 - 2 = ".$p->Sub(4, 2));
  print("4 * 2 = ".$p->Mul(4, 2));
  print("4 / 2 = ".$p->Div(4, 2));

Количество комментариев: 0

Для того, чтобы оставить коментарий необходимо зарегистрироваться
814301 БГУИР
814302 БГУИР
814303 БГУИР
894351 БГУИР
90421 БГУИР


Изображения Видео

1. Абстрактная фабрика https://www.youtube.com/watch?v=1mVONOCxfLg
2. Фабричный метод https://www.youtube.com/watch?v=5UqUDR6_2cY
3. Шаблон декоратор https://www.youtube.com/watch?v=Lwb9bm8yKD0
4. Dessign patterns on PHP https://github.com/domnikl/DesignPatternsPHP
5. Приёмы объектно-ориентированного проектирования. Паттерны проектирования Э. Гамма, Р. Хелм, Р. Джонсон, Д. Влиссидес; [пер. с англ.: А. Слинкин науч. ред.: Н. Шалаев]. — Санкт-Петербург [и др.] : Питер, 2014. — 366 с. : ил. ; 24 см.
6. Приемы объектно-ориентированного проектирования. Паттерны проектирования Э. Гамма, Р. Хелм, Р. Джонсон, Д. Влиссидес; [пер. с англ.: А. Слинкин науч. ред.: Н. Шалаев]. — Санкт-Петербург [и др.] : Питер, 2014. — 366 с. : ил. ; 24 см.
7. Ajax http://erud.by/ajax
8. Ajax http://erud.by/ajax
9. Ajax http://erud.by/ajax
10. Документация Laravel http://laravel.com
Задание к курсовой работе
Задание к курсовой работе
Вопросы к экзамену