forked from DesignPatternsPHP/DesignPatternsPHP
-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathPrototype.php
More file actions
65 lines (51 loc) · 1.13 KB
/
Copy pathPrototype.php
File metadata and controls
65 lines (51 loc) · 1.13 KB
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?php
namespace DesignPatterns;
/**
* Prototype pattern
*
* Purpose:
* to avoid the cost of creating objects the standard way (new Foo()) and instead create a prototype and clone it
*
* Examples:
* - Large amounts of data (e.g. create 1,000,000 rows in a database at once via a ORM)
*
*/
abstract class BookPrototype
{
protected $_title;
protected $_category;
/**
* @abstract
* @return void
*/
abstract public function __clone();
public function getTitle()
{
return $this->_title;
}
public function setTitle($title)
{
$this->_title = $title;
}
}
class FooBookPrototype extends BookPrototype
{
protected $_category = 'Foo';
public function __clone()
{
}
}
class BarBookPrototype extends BookPrototype
{
protected $_category = 'Bar';
public function __clone()
{
}
}
$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);
}