html; } } interface PageBuilder { public function setFeed(); public function setPaginator(); // ... другие методы для установки свойств public function build(); } //implements PageBuilder { class MusicPageBuilder implements PageBuilder { private Page $page; const LIMIT = 5; const OFFSET = 0; private $data = []; private $limit = Null; private $offset = Null; private $flag = 'ajax'; public function __construct($data, $flag = 'ajax' ) { $this->page = new Page(); $this->flag = $flag; $this->data = $data; $this->limit = isset($_GET['limit'])? $_GET['limit'] : self::LIMIT; $this->offset = isset($_GET['offset']) ? $_GET['offset']: self::OFFSET; } public function setFeed(){ $portial = array_slice($this->data, $this->offset, $this->limit); $this->page->feed =''; return $this; } public function setPaginator(){ $len = sizeof($this->data); $contPage = intdiv($len, $this->limit); for ($i = 0; $i < $contPage; $i++ ) { $this->page->paginator .= ''. $i. '  '; } return $this; } public function build(){ $feed = $this->page->feed; $paginator = $this->page->paginator; $pg = ($this->flag == 'ajax')?$feed: $paginator; $this->page->html = <<< EOF Document $pg EOF; return $this->page; } } // Клиентский код $builder = new MusicPageBuilder($arrMusic); $page = $builder->setFeed()->setPaginator()->build(); echo $page . PHP_EOL; // $p = new Paginator($arrMusic); // $p->renderFeed(); // $p->renderPaginator(); // $p->renderPage();