IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> PHP设计模式之装饰器模式 -> 正文阅读

[PHP知识库]PHP设计模式之装饰器模式

我们先看一个列子,很简单,添加一个商品信息,并且输出商品信息

/**
 * 商品
 */
class Goods
{
    // 定义商品列表
    public $goodList;
    
    public function __construct()
    {
        $this->goodList = [];
    }

    // 添加商品信息
    public function addGood($good)
    {
        $this->goodList[] = $good;
    }
    // 输出商品信息
    public function getGoodInfo()
    {
        foreach ($this->goodList as $key => $good) {
            $info = $good['name'] . ' ' . $good['attr'];
        }
        return $info;
    }
}

上述类中有一个添加商品的方法,还有一个输出商品信息的方法,调用方法,输出对象

$good = new Goods();
$good->addGood(['name' => '华为', 'attr' => 'P50']);
echo $good->getGoodInfo(); // 华为 P50

如果这时候PM提了一个需求,要求在部分商品名称前面加上’特惠’二字,我们改如何实现呢?那无疑是非常简单的,大部分人首选会想到的是在上述getGoodList方法中做判断加if来区别,这是一个非常好的方案,但是有没有想过如果PM还有其他需求要怎么办呢,继续加if么?那这个方法是不是会出现很多的if else,这显然就不是一个可读性很强的代码了,而且你在上述getGoodList方法继续添加逻辑,很可能会导致老代码的不可用,测试需要通盘测试,增加了测试的压力,而这个时候装饰器就可以非常好的解决该问题,在不改动老代码的基础上实现新的需求。

/**
 * 装饰器
 */
class GoodsListDecoratorCaps
{
    private $_goods;
    // 构造方法
    function __construct(Goods $goods)
    {
        $this->_goods = $goods;
    }
	// 重新定义输出方式
    public function makeCaps()
    {
        foreach ($this->_goods->goodList as $key => $good) {
            $info = '特惠 ' . $good['name'] . ' ' . $good['attr'];
        }
        return $info;
    }
}


$newgood = new Goods();
$newgood->addGood(['name' => '华为', 'attr' => 'nova8 SE']);
$goodCaos = new GoodsListDecoratorCaps($newgood);

echo $goodCaos->makeCaps(); // 特惠 华为 nova8 SE

撸优雅的代码,撸别人想看的代码,而不是别人一看你的代码就皱眉头!!!

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-09-06 10:56:57  更:2021-09-06 10:57:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 15:40:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码