PHP 裝飾器模式


裝飾器模式:
如果已有對象的部分內容或功能性發生改變,但是不需要修改原始對象的結構或不使用繼承,動態的擴展一個對象的功能,則應該使用裝飾器模式。
簡單點說:就是我們不應該去修改已有的類,而是通過創建另外一個裝飾器類,通過這個裝飾器類去動態的擴展其需要修改的內容,這樣做的好處就是————
1、我們可以保證類的層次不會因過多而發生混亂。
2、當我們需求的修改很小時,不用改變原有的數據結構。


<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2017/8/23
 * Time: 15:48
 */

class User
{

    public $nameList = [];

    public function returnNames()
    {
        $str = '';
        foreach ($this->nameList as $name)
        {
            $str .= $name.'#';
        }
        return $str;
    }

}
//現在需求調用returnNames返回的名字首字母大寫
//1.創建裝飾器類
class UserDecorator
{

    public $user;
    public function __construct(User $u)
    {

        $this->user = $u;
    }

    public function returnPNames()
    {
        $str = '';
        foreach ($this->user->nameList as $name)
        {
            $str .= ucfirst($name).'#';
        }
        return $str;
    }

}

//運行代碼,新增的方法沒有侵入老代碼,完全不影響老程序的運行,而且又擴展了舊的類
$u = new User();
$u->nameList = ['limimi','gaomimi','zhaomimi','wangmimi'];
echo $u->returnNames()."\r\n";
$ud = new UserDecorator($u);
echo $ud->returnPNames();





結果

D:\myapache\www\demo\guancazhe>php Decorator.php
limimi#gaomimi#zhaomimi#wangmimi#
Limimi#Gaomimi#Zhaomimi#Wangmimi#

發佈了136 篇原創文章 · 獲贊 69 · 訪問量 31萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章