建造者模式php,建造者模式

本文介绍了建造者模式的基本概念,通过Java和PHP代码实例展示如何将复杂产品的创建过程与表示分离,抽象建造者和具体建造者角色。重点讲解了产品类、抽象建造者、建造者和导演类的职责划分,以及如何在实际编程中灵活扩展。
摘要由CSDN通过智能技术生成

基础

定义: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

类型: 创建类模式

关键点: 封装一个复杂对象的构建过程,并可以按步骤构造。

类图

fe2160b565317d8469832122a750bad9.png

f6890b327588e19fe3c36e804b5a8183.png

四个要素

产品类: 一般是一个较为复杂的对象,也就是说创建对象的过程比较复杂,一般会有比较多的代码量。在本类图中,产品类是一个具体的类,而非抽象类。实际编程中,产品类可以是由一个抽象类与它的不同实现组成,也可以是由多个抽象类与他们的实现组成。

抽象建造者: 引入抽象建造者的目的,是为了将建造的具体过程交与它的子类来实现。这样更容易扩展。一般至少会有两个抽象方法,一个用来建造产品,一个是用来返回产品。

建造者: 实现抽象类的所有未实现的方法,具体来说一般是两项任务:组建产品;返回组建好的产品。

导演类: 负责调用适当的建造者来组建产品,导演类一般不与产品类发生依赖关系,与导演类直接交互的是建造者类。一般来说,导演类被用来封装程序中易变的部分。

Java代码

class Product {

private String name;

private String type;

public void setName(String name) {

this.name = name;

}

public void setType(String type) {

this.type = type;

}

public void showProduct() {

System.out.println("名称:" + name);

System.out.println("型号:" + type);

}

}

abstract class Builder {

public abstract void setPart(String arg1, String arg2);

public abstract Product getProduct();

}

class ConcreteBuilder extends Builder {

private Product product = new Product();

@Override

public void setPart(String arg1, String arg2) {

product.setName(arg1);

product.setType(arg2);

}

@Override

public Product getProduct() {

return product;

}

}

class Director {

private Builder builder = new ConcreteBuilder();

public Product getAProduct() {

builder.setPart("宝马汽车", "X7");

return builder.getProduct();

}

public Product getBProduct() {

builder.setPart("奥迪汽车", "Q5");

return builder.getProduct();

}

}

public class Client {

public static void main(String[] args) {

Director director = new Director();

Product product1 = director.getAProduct();

product1.showProduct();

Product product2 = director.getBProduct();

product2.showProduct();

}

}

PHP代码

class Product

{

private $name;

private $type;

public function setName($name)

{

$this->name = $name;

}

public function setType($type)

{

$this->type = $type;

}

public function showProduct()

{

echo "名称:{$this->name}\n";

echo "类型:{$this->type}\n";

}

}

abstract class Builder

{

abstract public function setPart($arg1, $arg2);

abstract public function getProduct();

}

class ConcreteBuilder extends Builder

{

private $product;

public function __construct()

{

$this->product = new Product();

}

public function setPart($arg1, $arg2)

{

$this->product->setName($arg1);

$this->product->setType($arg2);

}

public function getProduct()

{

return $this->product;

}

}

class Director

{

private $builder;

public function __construct()

{

$this->builder = new ConcreteBuilder();

}

public function getAProduction()

{

$this->builder->setPart('宝马汽车', 'X7');

return $this->builder->getProduct();

}

public function getBProduction()

{

$this->builder->setPart('奥迪汽车', 'Q5');

return $this->builder->getProduct();

}

}

class BuilderTest extends TestCase

{

public function test()

{

$director = new Director();

$product1 = $director->getAProduction();

$product1->showProduct();

$product2 = $director->getBProduction();

$product2->showProduct();

}

}

执行结果

名称:宝马汽车

类型:X7

名称:奥迪汽车

类型:Q5

参考文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值