-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathflyweight.php
More file actions
143 lines (116 loc) · 2.81 KB
/
flyweight.php
File metadata and controls
143 lines (116 loc) · 2.81 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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
<?
/**
* Como usar:
* Criar as classes Flyweight, que implementam IFlyweight;
* Criar uma class FlyweightFactory, que possui uma coleção de IFlyweight;
* Implementar as operações (Operation);
* Criar um construtor que inicialize a coleção de IFlyweight.
*/
interface ISanduiche
{
public function getPreco();
}
abstract class Sanduiche implements ISanduiche
{
var $nome;
var $preco;
public function getPreco()
{
return 0;
}
public function toString()
{
return "Tipo: " . $this->nome . " - valor: " . $this->preco;
}
}
class Hamburger extends Sanduiche
{
public function __construct()
{
$this->nome = "Hamburger";
$this->preco = 4;
}
public function getPreco()
{
return $this->preco;
}
}
class PaoComMortadela extends Sanduiche
{
public function __construct()
{
$this->nome = "PaoComMortadela";
$this->preco = 1;
}
public function getPreco()
{
return $this->preco;
}
}
class Misto extends Sanduiche
{
public function __construct()
{
$this->nome = "Misto";
$this->preco = 2;
}
public function getPreco()
{
return $this->preco;
}
}
/**
* Fabrica
*/
//padrao FlyweightFactory
class SanduichesFactory
{
var $arrSanduiches;
// mágica
// os objetos estão précriados, ou são acriados apenas uma única vez.
public function __construct()
{
$this->clear();
$this->add(1, new Hamburger());
$this->add(2, new PaoComMortadela());
$this->add(3, new Misto());
$this->add(4, new Misto());
}
public function clear()
{
unset($this->arrSanduiches);
$this->arrSanduiches = array();
}
public function add($id, $valor)
{
$this->arrSanduiches[ $id ] = $valor;
}
function getSanduiche($key)
{
if ($this->arrSanduiches[ $key ] != null) {
return $this->arrSanduiches[ $key ];
}
}
}
writeln('INICIANDO TESTE');
writeln('');
$objListaFly = new SanduichesFactory();
writeln("Pedido: " . $objListaFly->getSanduiche(4)->toString());
writeln("Pedido: " . $objListaFly->getSanduiche(3)->toString());
writeln("Pedido: " . $objListaFly->getSanduiche(2)->toString());
// varios pedidos de 1 // mágica
writeln("Pedido: " . $objListaFly->getSanduiche(1)->toString());
writeln("Pedido: " . $objListaFly->getSanduiche(1)->toString());
writeln("Pedido: " . $objListaFly->getSanduiche(1)->toString());
writeln("Pedido: " . $objListaFly->getSanduiche(1)->toString());
function writeln($line_in)
{
echo $line_in . "<BR>";
}
/**
* - usar quando se precisa de muitos objetos, e ao mesmo tempo não se quer usar muita memoria
*
* - Modern web browsers use this technique to prevent loading same images twice.
*
* -
*/