1. 程式人生 > 前端設計 >瀏覽器和網路篇(一)--瀏覽器的快取機制

瀏覽器和網路篇(一)--瀏覽器的快取機制

裝飾器模式(Decorator Pattern)允許向一個現有的物件新增新的功能,同時又不改變其結構。這種型別的設計模式屬於結構型模式,它是作為現有的類的一個包裝。
這種模式建立了一個裝飾類,用來包裝原有的類,並在保持類方法簽名完整性的前提下,提供了額外的功能。
我們通過下面的例項來演示裝飾器模式的用法。其中,我們將把一個形狀裝飾上不同的顏色,同時又不改變形狀類。
優點:

  裝飾類和被裝飾類可以獨立發展,不會相互耦合,裝飾模式是繼承的一個替代模式,裝飾模式可以動態擴充套件一個實現類的功能。
缺點:

  多層裝飾比較複雜。

舉例:

//Shape.class.php(抽象介面)

<?php

namespace Decorator;

interface Shape { public function draw(); }
//Circle.class.php(圓形具體實現類)

<?php

namespace Decorator;

class Circle implements Shape
{
    public function draw()
    {
        print_r("Shape: Circle" );
    }
}
//Rectangle.class.php(長方形具體實現類)

<?php

namespace Decorator;

class Rectangle implements
Shape { public function draw() { print_r("Shape: Rectangle"); } }
//ShapeDecorator.class.php(形狀裝飾類 抽象父類)

<?php

namespace Decorator;

abstract class ShapeDecorator implements Shape
{
    protected $decoratorShape;

    public function __construct(Shape $shape)
    {
        
$this->decoratorShape = $shape; } public function draw() { $this->decoratorShape->draw(); } }
// 繼承形狀裝飾抽象類,定義顏色

<?php

namespace Decorator;

class RedShapeDecorator extends ShapeDecorator{

    public function __construct(Shape $shape)
    {
        parent::__construct($shape);
    }

    public function draw()
    {
        $this->decoratorShape->draw();
        $this->setRedColor($this->decoratorShape);
    }

    private function setRedColor(Shape $shape)
    {
        print_r("red");
    }
}
// 入口檔案

<?php

spl_autoload_register(function ($className){
    $className = str_replace('\\','/',$className);
    include $className.".class.php";
});

use Decorator\Circle;
use Decorator\RedShapeDecorator;

$circle = new Circle();

$redCircle = new RedShapeDecorator(new Circle());
$redCircle->draw();

執行結果