現在の位置: ホーム> 最新記事一覧> Xiangyuanモードの詳細な分析とPHPでのそのアプリケーション

Xiangyuanモードの詳細な分析とPHPでのそのアプリケーション

gitbox 2025-06-28

楽しみモードは何ですか

百科事典モードは、オブジェクトを共有することでメモリの使用量を削減し、パフォーマンスを向上させるように設計された構造設計パターンです。このモードは、多数の同様のオブジェクトを備えたシーンに適しています。オブジェクトの公共状態を共有することにより、メモリを保存するだけでなく、オブジェクトの作成と破壊によって引き起こされるオーバーヘッドを減らすこともできます。

Xiangyuanモードの原理

百科事典モードの中心的なアイデアは、オブジェクトを内部状態(内因性属性)と外部状態(外部属性)に分割することです。内部状態は変更されておらず、複数のオブジェクトで共有できますが、外部状態は可変であり、通常はオブジェクトの環境によって決定されます。

内部状態を共有することにより、オブジェクトの数を大幅に削減できるため、メモリ消費が削減されます。外部状態は動的に渡され、使用時に変更されます。

Xiangyuanモードのアプリケーションシナリオ

Xiangyuanモデルは、次のシナリオで強いアプリケーション値を持っています。

多数の同様のオブジェクトを備えたシナリオ

システム内に多数の類似のオブジェクトがある場合、百科事典モードを使用してこれらのオブジェクトの内部状態を共有して、メモリ消費を大幅に削減することを検討できます。

プロパティは、内部状態および外部状態に分割できます

オブジェクトのプロパティを内部および外部状態に区別できる場合、内部状態を共有し、外部状態はオブジェクトの環境によって決定されます。

Xiangyuanモデルの実装

PHPにFunyモードを実装するための基本的な手順は次のとおりです。

まず、共有オブジェクトファクトリを作成して、共有共有オブジェクトを管理および提供します。

 class FlyweightFactory {
    private $flyweights = [];
    public function getFlyweight($key) {
        if (!isset($this->flyweights[$key])) {
            $this->flyweights[$key] = new ConcreteFlyweight($key);
        }
        return $this->flyweights[$key];
    }
}

次に、メタオブジェクトへのインターフェイスを定義します。

 interface Flyweight {
    public function operation();
}

次に、特定の享受オブジェクトを作成し、共有内部および外部状態を実装します。

 class ConcreteFlyweight implements Flyweight {
    private $key;
    public function __construct($key) {
        $this->key = $key;
    }
    public function operation() {
        // 特定の操作ロジック
    }
}

Xiangyuanモデルの長所と短所

アドバンテージ

  • メモリ保存:内部状態を共有することにより、オブジェクトの数を減らし、それによりメモリ使用量を削減します。
  • パフォーマンスの向上:オブジェクトの作成と破壊のオーバーヘッドを減らすことにより、システムのパフォーマンスを改善します。

欠点

  • 外部状態の変化は共有オブジェクトに影響を与える可能性があります。外部状態は環境によって制御されるため、外部状態の変化は共有オブジェクトの動作に影響を与える可能性があります。
  • オブジェクトの多重化制限:内部状態が頻繁に変更されると、共有の程度が減少し、それにより享受モードの利点が減少します。

楽しさモードの例

ゲーム開発を例にとると、キャラクターマネージャーが多数のキャラクターオブジェクトを管理する必要があるとします。キャラクターオブジェクトでは、プロフェッションやスキルなど、一部の属性が固定されていますが、他の属性は位置や健康などの変化があります。

この場合、職業は内部状態として共有され、地位と健康を外部状態として渡すことができます。

 class Character {
    private $job;
    private $position;
    private $hp;
    public function __construct($job) {
        $this->job = $job;
    }
    public function setPosition($x, $y) {
        $this->position = "($x, $y)";
    }
    public function setHP($hp) {
        $this->hp = $hp;
    }
    public function display() {
        echo "職業:{$this->job},位置:{$this->position},健康価値:{$this->hp}";
    }
}

百科事典モードを通じて、ロールオブジェクトの数を効果的に削減し、それによりメモリの利用とシステムのパフォーマンスを改善できます。

 $factory = new FlyweightFactory();
$character1 = $factory->getFlyweight('戦士');
$character1->setPosition(10, 20);
$character1->setHP(100);
$character1->display();
$character2 = $factory->getFlyweight('魔術師');
$character2->setPosition(30, 40);
$character2->setHP(80);
$character2->display();

出力結果:

 職業:戦士,位置:(10, 20),健康価値:100
職業:魔術師,位置:(30, 40),健康価値:80

上記の出力の結果から、共有オブジェクトの内部状態(職業など)は同じであり、外部状態(位置や健康など)は異なることがわかります。