コード例 #1
0
ファイル: index.php プロジェクト: Codealist/patterns
<?php

$factory = new TerrainFactory(new EarthSea(-2), new EarthForest(), new EarthPlains());
print_r($factory->getSea());
print_r($factory->getForest());
print_r($factory->getPlains());
コード例 #2
0
ファイル: index.php プロジェクト: Overfinch/oop
    function __construct(Sea $sea, Plains $plains, Forest $forest)
    {
        $this->sea = $sea;
        $this->plains = $plains;
        $this->forest = $forest;
    }
    function getSea()
    {
        return clone $this->sea;
    }
    function getForest()
    {
        return clone $this->forest;
    }
    function getPlains()
    {
        return clone $this->plains;
    }
}
// вместо того что бы описывати классы типа MarsTerrainFactory и EarthTerrainFactory
// мы сами создаём прототип фабрики в которую передаём экземпляры нужных нам классов
$factory = new TerrainFactory(new EarthSea(1), new EarthPlains(), new EarthForest());
// Здесь мы загружаем в экземпляр конкретной фабрики типа TerrainFactory экземпляры объектов наших "поверхностей".
// Когда в клиентском коде вызывается метод getSea(), ему возвращается клон объекта Sea,
// который мы поместили в кэш во время инициализации. Так мы не только сократили пару классов, но и получили гибкость,
// можно создать фабрику которая, например создаёт планету с морями и лесами как на Земле, и с равнинами как на марсе.
echo "<pre>";
var_dump($factory->getSea());
var_dump($factory->getPlains());
var_dump($factory->getForest());
echo "<pre>";
コード例 #3
0
ファイル: Prototype.php プロジェクト: VitaOpus/Patterns
class MarsForest extends Forest
{
}
class TerrainFactory
{
    private $sea;
    private $forest;
    private $plains;
    function __construct(Sea $sea, Plains $plains, Forest $forest)
    {
        $this->sea = $sea;
        $this->plains = $plains;
        $this->forest = $forest;
    }
    function getSea()
    {
        return clone $this->sea;
    }
    function getPlains()
    {
        return clone $this->plains;
    }
    function getForest()
    {
        return clone $this->forest;
    }
}
$factory = new TerrainFactory(new EarthSea(-1), new EarthPlains(), new EarthForest());
print_r($factory->getSea()->getNavigability());
print_r($factory->getPlains());
print_r($factory->getForest());
コード例 #4
0
ファイル: PrototypeWiki.php プロジェクト: manachyn/trainings
    private $forest;
    private $plains;
    public function __construct(Sea $sea, Plains $plains, Forest $forest)
    {
        $this->sea = $sea;
        $this->plains = $plains;
        $this->forest = $forest;
    }
    function getSea()
    {
        return clone $this->sea;
    }
    function getPlains()
    {
        return clone $this->plains;
    }
    function getForest()
    {
        return clone $this->forest;
    }
}
/**
 * Создание фабрики с заданными параметрами прототипа
 */
$prototypeFactory = new TerrainFactory(new EarthSea(), new MarsPlains(), new VenusForest());
/**
 * Создание заданных объектов путём клонирования
 */
$sea = $prototypeFactory->getSea();
$plains = $prototypeFactory->getPlains();
$forest = $prototypeFactory->getForest();
コード例 #5
0
ファイル: Prototype.php プロジェクト: alxolr/php-dp
    {
        $this->sea = $sea;
        $this->forest = $forest;
        $this->plains = $plains;
    }
    /**
     * @return Sea
     */
    public function getSea()
    {
        return clone $this->sea;
    }
    /**
     * @return Plains
     */
    public function getPlains()
    {
        return clone $this->plains;
    }
    /**
     * @return Forest
     */
    public function getForest()
    {
        return clone $this->forest;
    }
}
$factory = new TerrainFactory(new EarthSea(), new EarthPlains(), new EarthForest());
$factory->getSea();
$factory->getForest();
$factory->getPlains();