PHP design mode-builder mode, PHP design mode
Requirements Analysis:
We received an order from BMW and Mercedes-Benz, who are responsible for defining the parts and models of the product, and we are responsible for the production and the simple description of the requirement. We need to design a design pattern for this requirement to better adapt to their needs.
First of all we need a car model class to define all the components needed, which is called abstract class, because we are also likely to receive orders from more companies, such as Rolls-Royce, Bentley.
Then by the respective car to inherit this abstract class, implement the method inside.
Next, a builder abstract class is needed to define how the respective vehicle needs to be built.
This abstract class is then inherited by the respective vehicle builders.
We'll think of a construction model, yes, the builder mode. It's just too appropriate to use it. Take a look at the builder's use case diagram
Note: The example method section of this diagram is not the same as my example.
Directly on the code:
1
Php2 3 Abstract classcarmodel{4 5 //It stores all the parts needed for the assembled vehicle.6 Public $spareParts=Array();7 8 //the name of the car9 Public $carName= "";Ten One //Adding wheel parts A Public Abstract functionAddlunzi ($xinghao); - - //Adding shell parts the Public Abstract functionAddwaike ($xinghao); - - //Increased engine parts - Public Abstract functionAddfadongji ($xinghao); + - //get the car and take the name of the car + Final Public functionGetcar ($carName){ A if($this-spareparts) { at $this->carname =$carName; - //$k represents the part name - //$V representative model - foreach($this->spareparts as $k=$v){ - $actionName= "Add".$k; - $this-$actionName($v); in } -}Else{ to Throw New Exception("No Car Parts"); + - } the } * } $ Panax Notoginseng - //define a specific product the classBmwcarmodelextendscarmodel{ + A Public $spareParts=Array(); the Public $carName= ""; + - Public functionAddlunzi ($xinghao){ $ Echo"BMW".$this->carname. " The wheel, the model is ".$xinghao. "\ n"; $ } - - Public functionAddwaike ($xinghao){ the Echo"BMW".$this->carname. " The casing, the model is ".$xinghao. "\ n"; - }Wuyi the Public functionAddfadongji ($xinghao){ - Echo"BMW".$this->carname. " The engine, the model is ".$xinghao. "\ n"; Wu } - } About $ - //define a specific product - classBenzicarmodelextendscarmodel{ - A Public $spareParts=Array(); + Public $carName= ""; the - Public functionAddlunzi ($xinghao){ $ Echo"Mercedes-Benz".$this->carname. " The wheel, the model is ".$xinghao. "\ n"; the } the the Public functionAddwaike ($xinghao){ the Echo"Mercedes-Benz".$this->carname. " The casing, the model is ".$xinghao. "\ n"; - } in the Public functionAddfadongji ($xinghao){ the Echo"Mercedes-Benz".$this->carname. " The engine, the model is ".$xinghao. "\ n"; About } the } the the + - //Define Builders the Abstract classcarbuilder{Bayi Public Abstract functionSetspareparts ($partsName,$xinghao); the the Public Abstract functionGetcarmodel ($name); - } - the the classBmwbuilderextendscarbuilder{ the Private $bmwModel; the - Public function__construct () { the $this->bmwmodel =NewBmwcarmodel (); the } the 94 Public functionSetspareparts ($partsName,$xinghao){ the $this->bmwmodel->spareparts[$partsName] =$xinghao; the } the 98 Public functionGetcarmodel ($name){ About $this->bmwmodel->getcar ($name); - }101 }102 103 104 classBenzibuilderextendscarbuilder{ the Private $benziModel;106 107 Public function__construct () {108 $this->benzimodel =NewBenzicarmodel ();109 } the 111 Public functionSetspareparts ($partsName,$xinghao){ the $this->bmwmodel->spareparts[$partsName] =$xinghao;113 } the the Public functionGetcarmodel ($name){ the $this->bmwmodel->getcar ($name);117 }118 }119 - 121 122 //impersonate a client call123 124 //Create a BMW car and take the name BMW X1 the 126 $bmwBuilder=NewBmwbuilder ();127 $bmwBuilder->setspareparts (' Lunzi ', ' Awesome Wheels # 1th ')); - $bmwBuilder->setspareparts (' waike ', ' t-Shell No. 1th ');129 $bmwBuilder->setspareparts (' Fadongji ', ' t-engine # 1th '); the $bmwBuilder->getcarmodel ("BMW X1"); 131 $bmwBuilder->getcarmodel ("BMW X1");//Create two BMW X1 in a row the 133 //re-create a BMW without a shell named BMW S5134 $bmwBuilder=NewBmwbuilder ();135 $bmwBuilder->setspareparts (' Lunzi ', ' Awesome Wheels # 2nd '));136 $bmwBuilder->setspareparts (' Fadongji ', ' t-engine # 2nd ');137 $bmwBuilder->getcarmodel ("BMW S5"); 138 $bmwBuilder->getcarmodel ("BMW S5");//Create two BMW X1 in a row
Code can run directly, you can try to produce a good Mercedes Benz Oh.
Definition of builder pattern
The builder pattern, also called the builder pattern, is defined as follows:
separate the construction of a complex object from it representation so, the same construction process can create Different representations. separating the construction of a complex object from its representation allows the same build process to create different representations.
A generic class diagram of the builder pattern.
In the builder mode, there are four characters:
The template method pattern is usually implemented, that is, the template method and the basic method, which refer to the template method pattern of the previous chapter. In the example, Benzmodel and Bmwmodel belong to the product class.
The establishment of normative products is generally implemented by subclasses. In the example, Carbuilder belongs to the abstract builder.
- ConcreteBuilder Concrete Builders
Implements all methods of the abstract class definition, and returns a component good object. In the example, Benzbuilder and Bmwbuilder belong to the concrete builders.
Be responsible for arranging the order of the existing modules, and then tell Builder to start building, in the example above is our boss, the cattle Fork Company to find the boss, said I want this, this, that type of vehicle model, and then the boss of the command passed to me, my team and I began desperately building, so a project was completed.
Introduction to PHP Design Patterns
You don't have to look for ' php design Patterns ', you can look for ' design patterns ' or ' Java Design Patterns ' and more. Because design patterns are not specific to a language but a thought, you can see that the design patterns are the same in either the PHP design pattern or the Java design pattern ' or ' design pattern.
What are the benefits of PHP design patterns?
If you use Userfactory, you do not have to know the existence of the user class, the abstract class to help you hide it, later if the class more, the mode of maintenance is more convenient, it is recommended that you understand the abstract Factory mode, Factory mode, factory method mode, these are for reusable programming means.
http://www.bkjia.com/PHPjc/878815.html www.bkjia.com true http://www.bkjia.com/PHPjc/878815.html techarticle PHP design mode-builder mode, PHP design pattern Requirements Analysis: We received an order from BMW and Mercedes, who are responsible for defining the parts and models of the product ...