Паттерн проектирования Builder (Строитель) на PHP

Паттерн Builder является паттерном создания объектов (creational pattern). Суть его заключается в том, чтобы отделитьпроцесс создания некоторого сложного объекта от его представления. Таким образом, можно получать различныепредставления объекта, используя один и тот же “технологический” процесс.


Цель

Отделяет конструирование сложного объекта от его представления, так что в результате одного и того же процессаконструирования могут получаться разные представления.


Плюсы

  • позволяет изменять внутреннее представление продукта;
  • изолирует код, реализующий конструирование и представление;
  • дает более тонкий контроль над процессом конструирования.

Применение

  • алгоритм создания сложного объекта не должен зависеть от того, из каких частей состоит объект и как онистыкуются между собой;
  • процесс конструирования должен обеспечивать различные представления конструируемого объекта.

Паттерн проектирования Builder (Строитель) на PHP

 1: <?php
 2:
 3:
class Phone
 4:
{
 5:     private 
$_name;
 6:     private 
$_os;
 7:
 8:     public function 
setName($name)
 9:     {
10:         
$this->_name $name;
11:     }
12:
13:     public function 
setOs($os)
14:     {
15:         
$this->_os $os;
16:     }
17: }
18:
19: abstract class 
BuilderPhone
20:
{
21:     protected 
$_phone;
22:
23:     public function 
getPhone()
24:     {
25:         return 
$this->_phone;
26:     }
27:
28:     public function 
createPhone()
29:     {
30:         
$this->_phone = new Phone();
31:     }
32:
33:     abstract public function 
buildName();
34:
35:     abstract public function 
buildOs();
36: }
37:
38: class 
BuilderNexus4 extends BuilderPhone
39:
{
40:     public function 
buildName()
41:     {
42:         
$this->_phone->setName('Nexus4');
43:     }
44:
45:     public function 
buildOs()
46:     {
47:         
$this->_phone->setOs("Android");
48:     }
49: }
50:
51: class 
BuilderIphone5 extends BuilderPhone
52:
{
53:     public function 
buildName()
54:     {
55:         
$this->_phone->setName('Iphone5');
56:     }
57:
58:     public function 
buildOs()
59:     {
60:         
$this->_phone->setOs("iOs");
61:     }
62: }
63:
64: class 
Chooser
65:
{
66:     private 
$_builderPhone;
67:
68:     public function 
setBuilderPhone(BuilderPhone $mp)
69:     {
70:         
$this->_builderPhone $mp;
71:     }
72:
73:     public function 
getPhone()
74:     {
75:         return 
$this->_builderPhone->getPhone();
76:     }
77:
78:     public function 
constructPhone()
79:     {
80:         
$this->_builderPhone->createPhone();
81:         
$this->_builderPhone->buildName();
82:         
$this->_builderPhone->buildOs();
83:     }
84: }
85:
86:
$user = new Chooser();
87:
$google = new BuilderNexus4();
88:
$apple = new BuilderIphone5();
89:
$user->setBuilderPhone($google);
90:
$user->constructPhone();
91:
$realPhone $user->getPhone();// :)

Теги: Строитель, Builder, Порождающие шаблоны


Похожие статьи

Паттерн проектирования Prototype (Прототип) на PHP

Паттерн проектирования Multiton (Пул одиночек) на PHP

Паттерн проектирования Abstract Factory (Абстрактная фабрика) на PHP

Паттерн проектирования Factory Method (Фабричный метод) на PHP

Паттерн проектирования Resource Acquisition Is Initialization - RAII (Получение ресурса есть инициализация) на PHP

Паттерн проектирования Object pool (Объектный пул) на PHP

Паттерн проектирования Singleton (Одиночка) на PHP

Паттерн проектирования Lazy initialization (Отложенная инициализация) на PHP