美文网首页
二. PHP的23种设计模式之一 - 建造者模式

二. PHP的23种设计模式之一 - 建造者模式

作者: JensenXie | 来源:发表于2023-03-27 14:29 被阅读0次

建造者模式(Builder Pattern)是一种创建型设计模式,可以理解是将多个简单的对象一点点组合成一个复杂对象或是将一个复杂的对象的创建过程分离出来,使这个创建过程可以独立出来,让创建复杂对象更加的灵活。

在建造者模式中,通常会有一个抽象的建造过程的建造者类和具体的建造者类,抽象建造者类定义了具体的建造接口,建造者类继承这个接口并实现它。另外还有指挥者类(Director),用于控制建造者类,协调对象的控制过程。

建造者模式的优点
  1. 隐藏对象的创建过程,让客户端不需要关心具体的创建过程。
  2. 对象的构造过程可以复用,可以在不同的复杂对象中重复复用。
  3. 可以灵活的扩展对象的构造过程,增加新的创建步骤或者更改创建步骤的顺序。

下面我写了一个简单的建造者模式demo,我们需要创建一个复杂对象(电脑),其中有一个抽象的电脑创建类(AbstractComputerBuilder),和两个具体的电脑建造者类实现抽象的电脑创建类(LaptopBuilder和DesktopBuilder),在指挥者类(Director)中,我们控制具体的建造者类,调用创建过程实现复杂的电脑类。

<?

//抽象的电脑建造者类
abstract class AbstractComputerBuilder
{
    protected $computer;

    public function getComputer() {
        return $this->computer;
    }

    public function createComputer() {
        $this->computer = new Computer();
    }

    abstract public function addCpu();

    abstract public function addRam();

    abstract public function addVideoCard();
}

//台式电脑电脑建造者类
class DesktopBuilder extends AbstractComputerBuilder
{
    public function addCpu()
    {
        $this->computer->setCpu("I7");
    }

    public function addRam()
    {
        $this->computer->setRam("32G");
    }

    public function addVideoCard()
    {
        $this->computer->setVideoCard("4080ti");
    }
}

//笔记本电脑电脑建造者类
class LaptopBuilder extends AbstractComputerBuilder
{
    public function addCpu()
    {
        $this->computer->setCpu("I5");
    }

    public function addRam()
    {
        $this->computer->setRam("16G");
    }

    public function addVideoCard()
    {
        $this->computer->setVideoCard("3080");
    }
}

//电脑类
class Computer
{
    private $cpu;
    private $ram;
    private $videoCard;

    public function setCpu($cpu)
    {
        $this->cpu = $cpu;
    }

    public function setRam($ram)
    {
        $this->ram = $ram;
    }

    public function setVideoCard($videoCard)
    {
        $this->videoCard = $videoCard;
    }

    public function getComputerParams()
    {
        return "CPU: {$this->cpu}, RAM: {$this->ram}, Hard Drive: {$this->videoCard}";
    }
}

class Director {
    private $builder;

    public function setBuilder($builder){
        $this->builder = $builder;
    }

    public function getComputer(){
        return $this->builder->getComputer();
    }

    public function buildComputer() {
        $this->builder->createComputer();
        $this->builder->addCpu();
        $this->builder->addRam();
        $this->builder->addVideoCard();
    }
}

$desktopBuilder = new DesktopBuilder();
$laptopBuilder = new LaptopBuilder();
$director = new Director();

//构造台式电脑
$director->setBuilder($desktopBuilder);
$director->buildComputer();
$desktopComputer = $director->getComputer();
echo $desktopComputer->getComputerParams().'<br>';

//构造笔记本电脑
$director->setBuilder($laptopBuilder);
$director->buildComputer();
$laptopComputer = $director->getComputer();
echo $laptopComputer->getComputerParams();

相关文章

  • PHP完整实战23种设计模式

    前言 设计模式是面向对象的最佳实践 实战 PHP实战创建型模式 单例模式 工厂模式 抽象工厂模式 原型模式 建造者...

  • 30 Java设计模式系列-建造者(Build)模式

    建造者(Build)模式 建造者(Build)模式是非常常见的设计模式之一,写个笔记,记录一下我的学习过程和心得。...

  • PHP设计模式:建造者模式

    前言 建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模...

  • PHP设计模式-建造者模式

    适用性 建造者设计模式定义了处理其他对象的复杂构建的对象设计 UML 代码示例 具体项目包含一个创建复杂产品对象的...

  • Retrofit

    Retrofit设计模式 动态代理,装饰模式,建造者模式,抽象工厂模式,适配器模式 建造者模式创建Retrofit...

  • Java 十一种设计模式深入理解

    目录一、工厂设计模式二、抽象工厂模式三、单例设计模式四、建造者(Builder)模式五、原型模式六、适配器设计模式...

  • Android中涉及的模式

    我的Java设计模式-建造者模式 我的Java设计模式-观察者模式 重学设计模式之单例模式

  • 设计模式之建造者模式

    设计模式之建造者模式 Intro 简介 建造者模式: 建造者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加...

  • 设计模式(十四)中介者模式

    相关文章 设计模式(一)设计六大原则设计模式(二)单例模式的七种写法设计模式(三)建造者模式设计模式(四)简单工厂...

  • 【Java设计模式】--建造者模式

    建造者模式(Bulider模式) 一、什么是建造者模式 建造者模式是设计模式的一种,将一个复杂对象的构建与它的表示...

网友评论

      本文标题:二. PHP的23种设计模式之一 - 建造者模式

      本文链接:https://www.haomeiwen.com/subject/pfjoldtx.html