On gists
3. Factory Method (Tovární metoda)
•
Navrhove vzory - Bohmer
factory-method.php
Raw
#
<?php
/*
Definice
Návrhový vzor Factory Method definuje rozhraní pro vytváření objektů,
přičemž vlastní tvorbu instancí přenechává svým potomkům. Potomci rozhodují, které konkrétní implementace se mají použít.
*/
abstract class AbstractPublisher
{
protected $category;
public function __construct($category)
{
$this->category = $category;
}
public function sellPublication($pageCount)
{
$publication = $this->createPublication($pageCount);
$publication->open();
$page = mt_rand(1, $pageCount);
$publication->setPageNumber($page);
$publication->close();
return $publication;
}
abstract protected function createPublication($pageCount);
}
class BookPublisher extends AbstractPublisher
{
protected function createPublication($pageCount)
{
$publication = new Book($this->category, $pageCount);
return $publication;
}
}
class JournalPublisher extends AbstractPublisher
{
protected function createPublication($pageCount)
{
// Journal je jako Book
$publication = new Journal($this->category, $pageCount);
return $publication;
}
}
// Usage
$bookPublisher = new BookPublisher('PC');
$book = $bookPublisher->sellPublication(100);
print "Zakoupena nová publikace: \n";
printf("Typ: %s \n", get_class($book));
printf("Kategorie: %s \n", $book->getCategory());
printf("Počet stran: %d \n", $book->getPageCount());
$journalPublisher = new JournalPublisher('medicína');
$journal = $journalPublisher->sellPublication(20);
print "Zakoupena nová publikace: \n";
printf("Typ: %s \n", get_class($journal));
printf("Kategorie: %s \n", $journal->getCategory());
printf("Počet stran: %d \n", $journal->getPageCount());