裝飾器模式又叫裝飾者模式。裝飾模式是在不必改變原類文件和使用繼承的情況下,動態地擴展一個對象的功能。它是通過創建一個包裝對象,也就是裝飾來包裹真實的對象。
```
<?php
/**
* 輸出一個字符串
* 裝飾器動態添加功能
* Class EchoText
*/
class EchoText
{
protected $decorator = [];
public function Index()
{
//調用裝飾器前置操作
$this->beforeEcho();
echo "你好,我是裝飾器。";
//調用裝飾器后置操作
$this->afterEcho();
}
//增加裝飾器
public function addDecorator(Decorator $decorator)
{
$this->decorator[] = $decorator;
}
//執行裝飾器前置操作 先進先出原則
protected function beforeEcho()
{
foreach ($this->decorator as $decorator)
$decorator->before();
}
//執行裝飾器后置操作 先進后出原則
protected function afterEcho()
{
$tmp = array_reverse($this->decorator);
foreach ($tmp as $decorator)
$decorator->after();
}
}
/**
* 裝飾器接口
* Class Decorator
*/
interface Decorator
{
public function before();
public function after();
}
/**
* 顏色裝飾器實現
* Class ColorDecorator
*/
class ColorDecorator implements Decorator
{
protected $color;
public function __construct($color)
{
$this->color = $color;
}
public function before()
{
echo "<dis style='color: {$this->color}'>";
}
public function after()
{
echo "</div>";
}
}
/**
* 字體大小裝飾器實現
* Class SizeDecorator
*/
class SizeDecorator implements Decorator
{
protected $size;
public function __construct($size)
{
$this->size = $size;
}
public function before()
{
echo "<dis style='font-size: {$this->size}px'>";
}
public function after()
{
echo "</div>";
}
}
//實例化輸出類
$echo = new EchoText();
//增加裝飾器
$echo->addDecorator(new ColorDecorator('red'));
//增加裝飾器
$echo->addDecorator(new SizeDecorator('40'));
//輸出
$echo->Index();
```
- 空白目錄
- 安裝
- linux下安裝nginx
- linux下安裝php
- 調試
- windows 安裝wamp
- 常用源
- 類型
- Boolean布爾類型
- Integer整型
- Float浮點型
- String字符串
- Array數組
- Object對象
- Resource資源類型
- NULL
- Callback/Callable類型
- 類型轉換
- 變量
- 預定義變量
- 常量
- 魔術常量(預定義常量)
- 語法
- 運算符
- 流程控制
- 條件語句
- if
- else
- else if/elseif
- switch
- 循環語句
- while
- do-while
- for
- foreach
- break
- return
- continue
- require
- include
- require_once
- include_once
- 函數
- 內置函數
- 匿名函數
- 自定義函數
- 類與對象
- 屬性
- 聲明
- public
- protected
- private
- 類常量
- 方法
- 魔術方法
- __construct()
- __destruct()
- __call()
- __callStatic()
- __get()
- __set()
- __isset()
- __unset()
- __sleep()
- __wakeup()
- __toString()
- __invoke()
- __set_state()
- __clone()
- __debugInfo()
- 方法的調用
- ->(對象運算符)
- ::(范圍解析操作符)
- 設計模式
- 依賴注入
- call_user_func
- is_callable (
- 創建型模式
- 工廠方法模式
- 抽象工廠模式
- 單例模式
- 建造者模式
- 原型模式
- 結構性模式
- 適配器模式
- 裝飾器模式
- 代理模式
- 外觀模式
- 橋接模式
- 組合模式
- 享元模式
- 行為型模式
- 策略模式
- 模板方法模式
- 觀察者模式
- 迭代子模式
- 責任鏈模式
- 命令模式
- 備忘錄模式
- 訪問者模式
- 中介者模式
- 解釋器模式
- 六大原則
- uml語言
- 反射
- 類型約束
- 調試
- lamp
- lnmp
- composer
- 工作常用
- UML圖
- 常見問題