PHP 设计模式是一种可重复使用的解决特定问题的代码设计方案,建造者模式是其中一种设计模式。下面是学习 PHP 设计模式建造者模式的攻略:
什么是建造者模式
建造者模式是一种创建型设计模式,将一个复杂对象的构建过程和它的表示分离开来,使同样的构建过程可以创建不同的表示。建造者模式通常涉及到一个抽象建造者类和具体的建造者类、指导者类和客户端类。
建造者模式的实现步骤
- 定义产品类(Product),这是需要被构建的复杂对象,包含多个部分。
- 定义抽象建造者类(Builder),声明构建各个部件的抽象方法。
- 定义具体建造者类(ConcreteBuilder),实现抽象建造者类中定义的方法,具体负责创建各个部件。
- 定义指导者类(Director),负责实现构建过程中的安排顺序等前期准备工作,以及最终完成产品的组装。
- 客户端(Client)通过指导者来创建具有不同属性的产品。
下面用两个简单的示例来说明建造者模式的实现。
示例1:创建一个车辆
假设我们要创建一个车辆,这个车辆包含轮子、引擎等部分。按照实现步骤,我们先定义产品类:
class Vehicle
{
private $wheels;
private $engine;
public function setWheels($wheels)
{
$this->wheels = $wheels;
}
public function setEngine($engine)
{
$this->engine = $engine;
}
}
接下来定义抽象建造者类:
abstract class VehicleBuilder
{
protected $vehicle;
public function createVehicle()
{
$this->vehicle = new Vehicle();
}
public function getVehicle()
{
return $this->vehicle;
}
abstract public function buildWheels();
abstract public function buildEngine();
}
其中,createVehicle() 用来创建一个新的车辆对象,getVehicle() 方法用来返回创建的车辆对象,buildWheels() 和 buildEngine() 是构建车辆轮子和引擎的抽象方法。
现在我们实现具体建造者类,ConcreteBuilderCar:
class ConcreteBuilderCar extends VehicleBuilder
{
public function buildWheels()
{
$this->vehicle->setWheels(4);
}
public function buildEngine()
{
$this->vehicle->setEngine('petrol');
}
}
定义完具体建造者类之后,我们需要定义指导者类,也就是 Director 类:
class Director
{
private $vehicleBuilder;
public function setBuilder(VehicleBuilder $vehicleBuilder)
{
$this->vehicleBuilder = $vehicleBuilder;
}
public function getVehicle()
{
return $this->vehicleBuilder->getVehicle();
}
public function constructVehicle()
{
$this->vehicleBuilder->createVehicle();
$this->vehicleBuilder->buildWheels();
$this->vehicleBuilder->buildEngine();
}
}
现在,我们就可以创建车辆了。客户端代码示例:
$builder = new ConcreteBuilderCar();
$director = new Director();
$director->setBuilder($builder);
$director->constructVehicle();
$vehicle = $director->getVehicle();
此时,我们得到了一个包含 4 个轮子和燃油引擎的车辆对象。
示例2:构建电脑
现在,我们来构建一台电脑。根据实现步骤,先定义产品类:
class Computer
{
private $cpu;
private $ram;
private $hdd;
private $ssd;
public function setCpu($cpu)
{
$this->cpu = $cpu;
}
public function setRam($ram)
{
$this->ram = $ram;
}
public function setHdd($hdd)
{
$this->hdd = $hdd;
}
public function setSsd($ssd)
{
$this->ssd = $ssd;
}
}
定义完产品类之后,我们定义抽象建造者类:
abstract class ComputerBuilder
{
protected $computer;
public function createComputer()
{
$this->computer = new Computer();
}
public function getComputer()
{
return $this->computer;
}
abstract public function buildCpu();
abstract public function buildRam();
abstract public function buildHdd();
abstract public function buildSsd();
}
这里同样包括了创建电脑对象的方法,以及构建 CPU、RAM、HDD、SSD 等部分的抽象方法。
接着,我们定义具体建造者类:
class ConcreteBuilderComputer extends ComputerBuilder
{
public function buildCpu()
{
$this->computer->setCpu('Intel Core i7');
}
public function buildRam()
{
$this->computer->setRam('16G');
}
public function buildHdd()
{
$this->computer->setHdd('1T');
}
public function buildSsd()
{
$this->computer->setSsd('512G');
}
}
定义完具体建造者类之后,我们需要定义指导者类:
class Director
{
private $computerBuilder;
public function setBuilder(ComputerBuilder $computerBuilder)
{
$this->computerBuilder = $computerBuilder;
}
public function getComputer()
{
return $this->computerBuilder->getComputer();
}
public function constructComputer()
{
$this->computerBuilder->createComputer();
$this->computerBuilder->buildCpu();
$this->computerBuilder->buildRam();
$this->computerBuilder->buildHdd();
$this->computerBuilder->buildSsd();
}
}
现在,我们就可以创建一台电脑了。客户端代码示例:
$builder = new ConcreteBuilderComputer();
$director = new Director();
$director->setBuilder($builder);
$director->constructComputer();
$computer = $director->getComputer();
此时,我们得到了一台配置为 Intel Core i7,16G RAM,1T HDD,512G SSD 的电脑对象。
以上是建造者模式的简单实现。在实际应用的时候,我们可以通过建造者模式将复杂对象的构建过程与表示分离开来,达到灵活、可扩展、易于维护等优点。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:学习php设计模式 php实现建造者模式 - Python技术站