分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 技术分享

php设计模式之:装饰者模式

发布时间:2023-09-06 02:02责任编辑:沈小雨关键词:暂无标签

Beverage.php

<?phpnamespace DesignPattern;abstract class Beverage{ ???/** ????* @var string ????*/ ???protected $name = ‘‘; ???/** ????* @return string ????*/ ???public function getName(): string ???{ ???????return $this->name; ???} ???/** ????* @param string $name ????* @return Beverage ????*/ ???public function setName(string $name): Beverage ???{ ???????$this->name = $name; ???????return $this; ???} ???/** ????* @return float ????*/ ???public abstract function getCost(): float; ???/** ????* Beverage constructor. ????*/ ???public function __construct() ???{ ???}}

BlueMountainCoffee.php

<?phpnamespace DesignPattern;/** * 蓝山咖啡 */class BlueMountainCoffee extends Beverage{ ???/** ????* @return float ????*/ ???public function getCost(): float ???{ ???????return 18.0; ???}}

CubitaCoffee.php

<?phpnamespace DesignPattern;/** * 琥爵咖啡 */class CubitaCoffee extends Beverage{ ???/** ????* @return float ????*/ ???public function getCost(): float ???{ ???????return 24.0; ???}}

CoffeeDecorator.php

<?phpnamespace DesignPattern;abstract class CoffeeDecorator extends Beverage{ ???/** ????* @var CoffeeDecorator ????*/ ???protected $coffeeDecorator; ???/** ????* CoffeeDecorator constructor. ????* @param Beverage $coffeeDecorator ????*/ ???public function __construct(Beverage $coffeeDecorator)//特别需要注意这个地方,装饰者模式必须允许对装饰后的对象再次装饰 ???{ ???????parent::__construct(); ???????$this->coffeeDecorator = $coffeeDecorator; ???}}

MilkDecorator.php

<?phpnamespace DesignPattern;class MilkDecorator extends CoffeeDecorator{ ???/** ????* @return float ????*/ ???public function getCost(): float ???{ ???????return $this->coffeeDecorator->getCost() + 2.5; ???}}

SugarDecorator.php

<?phpnamespace DesignPattern;class SugarDecorator extends CoffeeDecorator{ ???/** ????* @return float ????*/ ???public function getCost(): float ???{ ???????return $this->coffeeDecorator->getCost() + 1.2; ???}}

最终调用:

$coffee = new \DesignPattern\BlueMountainCoffee();//生成一杯蓝山咖啡$beverage = new \DesignPattern\MilkDecorator($coffee);//给蓝山咖啡加一份牛奶$beverage = new \DesignPattern\MilkDecorator($beverage);//给蓝山咖啡再加一份牛奶$beverage = new \DesignPattern\SugarDecorator($beverage);//给蓝山咖啡加一份糖$beverage = new \DesignPattern\SugarDecorator($beverage);//给蓝山咖啡再加一份糖$beverage = new \DesignPattern\SugarDecorator($beverage);//给蓝山咖啡再加一份糖var_dump($beverage->getCost());

程序运行结果:

float(26.6)

php设计模式之:装饰者模式

原文地址:https://www.cnblogs.com/foolishnoob/p/9261219.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved