PHPのあまり知られていないデザインパターンであるフライ級パターンは、以前に作成されたオブジェクトを再利用することにより、メモリ使用量を最適化します。 同一のオブジェクトを繰り返し作成する代わりに、プールからそれらを保管および取得し、冗長なリソース割り当てを回避します。 新しいオブジェクトを作成する前に既存のオブジェクトをチェックする洗練されたオブジェクト工場と考えてください。
このパターンは、各ファイルがフライ級オブジェクトとして機能する多数の大きなファイルを処理するアプリケーションで輝いています。
重要な概念:
メモリ効率:
フライウェイトファクトリーの例:
File
ファクトリーを使用すると、ファイルが一度だけロードされるようにします:data
class File { private $data; public function __construct($filePath) { if (!file_exists($filePath)) { throw new InvalidArgumentException('File not found: ' . $filePath); } $this->data = file_get_contents($filePath); } public function getData() { return $this->data; } }
スレッドとメモリ管理:
マルチスレッド環境では、フライ級パターンの不変性により、スレッドの安全性が保証されます。ただし、工場の方法は、ロックメカニズムを使用して同時オブジェクトの作成を防ぐために、重要なセクションとして扱う必要があります。 PHPでは、工場が無期限にオブジェクトを参照している場合、メモリリークが発生する可能性があります。したがって、このパターンは、事前に決められた限られた数のオブジェクトを備えたシナリオに最も適しています。FileFactory
フライウェイトによる列挙:$files
class FileFactory { private $files = []; public function getFile($filePath) { if (!isset($this->files[$filePath])) { $this->files[$filePath] = new File($filePath); } return $this->files[$filePath]; } }
class File { private $data; public function __construct($filePath) { if (!file_exists($filePath)) { throw new InvalidArgumentException('File not found: ' . $filePath); } $this->data = file_get_contents($filePath); } public function getData() { return $this->data; } }
このアプローチは、各タイプの一貫したオブジェクトIDを確保することにより、メモリの使用量を削減し、コードの明確さを改善します。
概要:
フライ級パターンは、オブジェクト共有がメモリの消費を大幅に削減する場合に最も効果的です。典型的なPHPアプリケーションではあまり一般的ではありませんが、特定のシナリオで役立つことが証明されています。 特に長期にわたるアプリケーションでは、メモリリークを回避するための適切な実装が鍵です。 列挙オブジェクトの作成に使用すると、コードの読みやすさと保守性が向上します。 パターンの利点は、多数の同様の不変のオブジェクトを扱うときに最も顕著です。以上がフライ級のデザインパターンと不変性:完璧なマッチの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。