建造者模式
建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。建造者模式属于对象创建型模式。根据中文翻译的不同,建造者模式又可以称为生成器模式。
模式结构
建造者模式包含如下角色:
- Builder:抽象建造者
- ConcreteBuilder:具体建造者
- Director:指挥者
- Product:产品角色
结构图
PHP代码实现
<?php
// 产品类
class Car {
public $wheels = 4;
public $engine;
public $transmission;
public function setEngine($engine) {
$this->engine = $engine;
}
public function setTransmission($transmission) {
$this->transmission = $transmission;
}
// 产品的其他设置方法...
}
// 抽象建造者
abstract class CarBuilder {
protected $car;
public function createNewCar() {
$this->car = new Car();
}
public function getCar() {
return $this->car;
}
abstract public function buildEngine();
abstract public function buildTransmission();
// 其他构建方法...
}
// 具体建造者
class SportsCarBuilder extends CarBuilder {
public function buildEngine() {
$this->car->setEngine('Sports engine');
}
public function buildTransmission() {
$this->car->setTransmission('Manual transmission');
}
// 其他构建方法的实现...
}
class SUVCarBuilder extends CarBuilder {
public function buildEngine() {
$this->car->setEngine('SUV engine');
}
public function buildTransmission() {
$this->car->setTransmission('Automatic transmission');
}
// 其他构建方法的实现...
}
// 导演类
class Director {
public function build(CarBuilder $builder) {
$builder->createNewCar();
$builder->buildEngine();
$builder->buildTransmission();
// 指挥建造者构建其他部分...
return $builder->getCar();
}
}
// 客户端使用示例
$director = new Director();
// 构建一辆运动车
$sportsCarBuilder = new SportsCarBuilder();
$sportsCar = $director->build($sportsCarBuilder);
echo "Car engine type: " . $sportsCar->engine . "\n";
echo "Car transmission type: " . $sportsCar->transmission . "\n";
// 构建一辆SUV车
$suvCarBuilder = new SUVCarBuilder();
$suvCar = $director->build($suvCarBuilder);
echo "Car engine type: " . $suvCar->engine . "\n";
echo "Car transmission type: " . $suvCar->transmission . "\n";