建造者模式

博客介绍了建造者模式,它是一种创建型模式,通过多个简单对象逐步构建复杂对象。有独立的 Builder 类来构造最终对象。还给出应用实例,如肯德基用固定食物组合成不同套餐。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

建造者模式

概念

建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。

应用实例: 1、去肯德基,汉堡、可乐、薯条、炸鸡翅等是不变的,而其组合是经常变化的,生成出所谓的”套餐”。

<?php
//创建一个食物条目和食物包装的接口
interface Item{
    public function name();
    public function packing();
    public function price();
}

interface Packing{
    public function pack();
}

//创建pack的实体类
class Wrapper implements Packing{
    public function pack()
    {
    return "Wrapper";
    }
}

//创建瓶子类
class Bottle implements Packing{
    public function pack()
    {
    // TODO: Implement pack() method.
    return "Bottle";
    }
}

//汉堡包
abstract class Burger implements Item{
    public function packing()
    {
    // TODO: Implement packing() method.
    return new Wrapper();
    }

    public abstract function price();
}

abstract class ColdDrink implements Item{
    public function packing()
    {
    // TODO: Implement packing() method.
    return new Bottle();
    }

    public abstract function price();
}

class VegBurger extends Burger{
    public function price()
    {
    // TODO: Implement price() method.
    return 20.5;
    }

    public function name()
    {
    // TODO: Implement name() method.
    return "Veg Burger";
    }
}

class ChickenBurger extends Burger{
    public function price()
    {
    // TODO: Implement price() method.
    return "50.5";
    }

    public function name()
    {
    return "chicken burger";
    }
}

class Coke extends ColdDrink{
    public function price()
    {
    // TODO: Implement price() method.
    return 30.3;
    }

    public function name()
    {
    return "Coke";
    }
}

class Pepsi extends ColdDrink{
    public function price()
    {
    // TODO: Implement price() method.
    return 35.0;
    }

    public function name()
    {
    // TODO: Implement name() method.
    return "Pepsi";
    }
}

class Meal{
    private $list = [];

    public function addItem($item)
    {
    $this->list[] = $item;
    }

    public function cost()
    {
    $cost = 0.0;

    foreach ($this->list as $value)
    {
        $cost += $value["price"];
    }
    return $cost;
    }

    public function showItems()
    {
    foreach ($this->list as $value)
    {
        var_dump($value->name());
        var_dump($value->price());
        var_dump($value->packing());
    }
    }
}

class MealBuilder{
    public function prepareVegMeal()
    {
    $meal = new Meal();
    $meal->addItem(new VegBurger());
    $meal->addItem(new Pepsi());
    return $meal;
    }

    public function prepareNonVegMeal()
    {
    $meal = new Meal();
    $meal->addItem(new ChickenBurger());
    $meal->addItem(new Coke());
    return $meal;
    }
}

$meal = new MealBuilder();
$obj = $meal->prepareNonVegMeal();
$obj->showItems();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值