Home > Article > Backend Development > php builder pattern
建造者模式-创建套餐
1.产品类Meal(套餐类)
class Meal { private $food; private $drink; public function setFood($f) { $this->food = $f; } public function setDrink($d) { $this->drink = $d; } public function getFood() { return $this->food; } public function getDrink() { return $this->drink; } }
2.抽象建造者类MealBuilder(套餐建造者类)
abstract class MealBuilder { protected $meal; function __construct() { $this->meal = new Meal(); } abstract protected function buildFood(); abstract protected function buildDrink(); public function getMeal() { return $this->meal; } }
class SubMealBuilderA extends MealBuilder { public function buildFood() { $this->meal->setFood('一个鸡腿堡'); } public function buildDrink() { $this->meal->setDrink('一杯可乐'); } public function getMeal() { return $this->meal; } }
class SubMealBuilderB extends MealBuilder { public function buildFood() { $this->meal->setFood('一个鸡肉卷'); } public function buildDrink() { $this->meal->setDrink('一杯果汁'); } public function getMeal() { return $this->meal; } }
class KFCWaiter { private $MealBuilder; public function setMealBuilder($mb) { eval("\$m= new {$mb}();"); $this->MealBuilder = $m; return $this->MealBuilder; } public function construct() { $this->MealBuilder->buildFood(); $this->MealBuilder->buildDrink(); return $this->MealBuilder->getMeal(); } }
<?xml version="1.0" encoding="UTF-8"?> <meal> <mealA> <name>SubMealBuilderA</name> </mealA> <mealB> <name>SubMealBuilderB</name> </mealB> </meal>
$mealstring = simplexml_load_file('meal.xml'); $waiter = new KFCWaiter(); foreach ($mealstring as $Submeal) { $waiter->setMealBuilder($Submeal->name); $meal = $waiter->construct(); echo '套餐组成:'; echo "<br>"; echo $meal->getFood(); echo "<br>"; echo $meal->getDrink(); echo "<br>"; echo "<br>"; }
运行结果
套餐组成:
一个鸡腿堡
一杯可乐
套餐组成:
一个鸡肉卷
一杯果汁
以上就介绍了php 建造者模式,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。