1.6. 프로토타입 (Prototype)¶
1.6.1. 사용 목적¶
일반적으로 사용하는 객체 생성(new Foo())의 비용을 피하기 위해서 사용합니다. 그리고 그 대신에 프로토타입을 생성하고 그것을 복제(clone)합니다.
1.6.2. 예시¶
많은 양의 데이터. (이를테면, ORM을 통해 데이터베이스에서 한번에 1,000,000줄을 생성할 때.)
1.6.3. UML 다이어그램¶
1.6.4. 코드¶
코드는 또한 GitHub 에서 볼 수 있습니다.
index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php
namespace DesignPatterns\Creational\Prototype;
$fooPrototype = new FooBookPrototype();
$barPrototype = new BarBookPrototype();
// now lets say we need 10,000 books of foo and 5,000 of bar ...
for ($i = 0; $i < 10000; $i++) {
$book = clone $fooPrototype;
$book->setTitle('Foo Book No ' . $i);
}
for ($i = 0; $i < 5000; $i++) {
$book = clone $barPrototype;
$book->setTitle('Bar Book No ' . $i);
}
|
BookPrototype.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | <?php
namespace DesignPatterns\Creational\Prototype;
/**
* class BookPrototype
*/
abstract class BookPrototype
{
/**
* @var string
*/
protected $title;
/**
* @var string
*/
protected $category;
/**
* @abstract
* @return void
*/
abstract public function __clone();
/**
* @return string
*/
public function getTitle()
{
return $this->title;
}
/**
* @param string $title
*/
public function setTitle($title)
{
$this->title = $title;
}
}
|
BarBookPrototype.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <?php
namespace DesignPatterns\Creational\Prototype;
/**
* Class BarBookPrototype
*/
class BarBookPrototype extends BookPrototype
{
/**
* @var string
*/
protected $category = 'Bar';
/**
* empty clone
*/
public function __clone()
{
}
}
|
FooBookPrototype.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?php
namespace DesignPatterns\Creational\Prototype;
/**
* Class FooBookPrototype
*/
class FooBookPrototype extends BookPrototype
{
protected $category = 'Foo';
/**
* empty clone
*/
public function __clone()
{
}
}
|