PHP паттерн Адаптер - пример

Будем адаптировать класс книги (адаптируемый):

class SimpleBook {
    private $author;
    private $title;
    function __construct($author_in, $title_in) {
        $this->author = $author_in;
        $this->title  = $title_in;
    }
// здесь имеется какой-то свой интерфейс
    function getAuthor() {
        return $this->author;
    }
    function getTitle() {
        return $this->title;
    }
}

с помощью вот такого класса-адаптера:

class BookAdapter {
    private $book;
    function __construct(SimpleBook $book_in) {
        $this->book = $book_in;
    }

    function getAuthorAndTitle() {// "добавляемый" метод 
        return $this->book->getTitle().' by '.$this->book->getAuthor();
    }
}

А вот пример использования "адаптированного" класса (теперь он скрыт внутри адаптера):

  // клиентский код

  writeln('Начало тестирования');
  writeln('');
// создаём исходный объект
  $book = new SimpleBook("Gamma, Helm, Johnson, and Vlissides", "Design Patterns");
// применяя адаптер к исходному - получаем кобинированную сущность 
 $bookAdapter = new BookAdapter($book);
// используем новый интерфейс (у нас это только один метод)
  writeln('Author and Title: '.$bookAdapter->getAuthorAndTitle()); // вызов метода
  writeln('');

  writeln('Конец тестирования');

  function writeln($line_in) {
    echo $line_in."<br/>";
  }

Источники:
http://sourcemaking.com/design_patterns/...

Key Words for FKN + antitotal forum (CS VSU):