輕量級模式(Flyweight Pattern) 以PHP為例

輕量級模式(Flyweight Pattern)是一種結構型設計模式,它旨在有效地支援大量細粒度的物件共享,以減少記憶體使用和提高效能。該模式通常在應用程式需要使用大量相似物件時使用。


以下是一個使用 PHP 實現輕量級模式的案例:

// Flyweight(輕量物件)介面定義了共享物件的操作

interface Flyweight {

    public function operation(): void;

}


// ConcreteFlyweight(具體輕量物件)實現 Flyweight 介面,並代表可共享的物件

class ConcreteFlyweight implements Flyweight {

    private $name;


    public function __construct($name) {

        $this->name = $name;

    }


    public function operation(): void {

        echo "ConcreteFlyweight: {$this->name}\n";

    }

}


// FlyweightFactory(輕量工廠)負責創建和管理共享的輕量物件

class FlyweightFactory {

    private $flyweights = [];


    public function getFlyweight($name): Flyweight {

        if (!isset($this->flyweights[$name])) {

            $this->flyweights[$name] = new ConcreteFlyweight($name);

        }


        return $this->flyweights[$name];

    }

}


// Client(客戶端)使用 Flyweight 物件

$factory = new FlyweightFactory();


$flyweightA = $factory->getFlyweight("A");

$flyweightA->operation();  // Output: ConcreteFlyweight: A


$flyweightB = $factory->getFlyweight("B");

$flyweightB->operation();  // Output: ConcreteFlyweight: B


$flyweightA2 = $factory->getFlyweight("A");

$flyweightA2->operation();  // Output: ConcreteFlyweight: A




在這個例子中,我們首先定義了一個 Flyweight 介面,該介面定義了共享物件的操作。然後,我們有一個具體的輕量物件 ConcreteFlyweight,它實現了 Flyweight 介面並代表可共享的物件。


接下來,我們定義了一個 FlyweightFactory,它負責創建和管理共享的輕量物件。該工廠在取得物件之前會檢查該物件是否已經存在,如果存在則返回已存在的物件,否則創建一個新的物件並存儲起來。


最後,我們在客戶端中使用 FlyweightFactory 來取得輕量物件。我們可以看到,當取得名稱為 "A" 的物件時,該物件被創建並執行操作。當再次取得相同名稱的物件時,該物件不會被重新創建,而是直接使用已存在的物件。


輕量級模式的目的是減少物件的數量,以節省記憶體和提高效能。通過共享具有相似狀態的物件,我們可以減少系統中物件的數量,從而減少記憶體使用和執行時間。

留言

這個網誌中的熱門文章

bcb C++ Builder無法讀取JPG

tesseract is not installed or it's not in your path

tensorflow gpu版本 安裝教學 window 10 python 3.6