建造者模式(Builder Pattern)
建造者模式(Builder Pattern)将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
问题引出:
假设我们有个生产车的工厂,可以制造各种车,比如自行车、汽车、卡车等等,如果每辆车都是从头到尾按部就班地造,必然效率低下。
解决方法:
我们可以试着将车的组装和零部件生产分离开来:让一个类似“导演”的角色负责车子组装,而具体造什么样的车需要什么样的零部件让具体的“构造者”去实现。
使用场景:
一些基本部件不会变,而其组合经常变化的时候。
关键代码:
建造者:创建和提供实例,导演:管理建造出来的实例的依赖关系。
示例代码:
//组装类
class Director {
public function build(BuilderInterface $builder) {
$builder->createVehicle();
$builder->addDoors();
$builder->addEngine();
$builder->addWheel();
return $builder->getVehicle();
}
}
//建造者接口
interface BuilderInterface {
public function createVehicle();
public function addWheel();
public function addEngine();
public function addDoors();
public function getVehicle();
}
//建造者实例
class BikeBuilder implements BuilderInterface {
}
class CarBuilder implements BuilderInterface {
}
//零件类
class Wheel {
}
class Doors {
}
class Engine {
}
总结:
建造者模式跟抽象工厂模式相比,就是多了一个“导演类”的角色,可以用来创建更加复杂的对象。抽像工厂模式是将对象的全部创建过程封装在工厂类中,而建造者模式中,建造者类一般只提供产品的各个组件的建造方法,而将建造过程交付给导演类。
网友评论