輕量級模式(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" 的物件時,該物件被創建並執行操作。當再次取得相同名稱的物件時,該物件不會被重新創建,而是直接使用已存在的物件。
輕量級模式的目的是減少物件的數量,以節省記憶體和提高效能。通過共享具有相似狀態的物件,我們可以減少系統中物件的數量,從而減少記憶體使用和執行時間。
留言
張貼留言