현재 위치: > 최신 기사 목록> Xiangyuan 모드 및 PHP의 적용에 대한 심층 분석

Xiangyuan 모드 및 PHP의 적용에 대한 심층 분석

gitbox 2025-06-28

즐거움 모드는 무엇입니까?

백과 사전 모드는 객체를 공유하여 메모리 사용량을 줄이고 성능을 향상 시키도록 설계된 구조 설계 패턴입니다. 이 모드는 비슷한 객체가 많은 장면에 적합합니다. 대상의 공개 상태를 공유함으로써 메모리를 절약 할 수있을뿐만 아니라 물체의 생성 및 파괴로 인한 오버 헤드를 줄일 수 있습니다.

Xiangyuan 모드의 원리

백과 사전 모드의 핵심 아이디어는 객체를 내부 상태 (본질 속성) 및 외부 상태 (외부 속성)로 나누는 것입니다. 내부 상태는 변경되지 않으며 여러 객체에 의해 공유 될 수 있지만 외부 상태는 가변적이며 일반적으로 객체의 환경에 의해 결정됩니다.

내부 상태를 공유함으로써 객체 수를 상당히 줄여 메모리 소비가 줄어들 수 있습니다. 외부 상태는 사용 중일 때 동적으로 전달되고 변경됩니다.

Xiangyuan 모드의 응용 시나리오

Xiangyuan 모델은 다음 시나리오에서 강력한 응용 프로그램 값을 가지고 있습니다.

많은 수의 비슷한 개체가있는 시나리오

시스템에 유사한 객체가 많으면 백과 사전 모드를 사용하여 이러한 객체의 내부 상태를 공유하여 메모리 소비를 크게 줄일 수 있습니다.

속성은 내부 상태 및 외부 상태로 분할 될 수 있습니다.

객체의 속성을 내부 및 외부 상태로 구별 할 수있는 경우 내부 상태를 공유 할 수 있으며 외부 상태는 물체의 환경에 의해 결정됩니다.

Xiangyuan 모델의 구현

PHP에서 즐겨 찾기 모드를 구현하기위한 기본 단계는 다음과 같습니다.

먼저 공유 객체 공장을 만들어 공유 공유 객체 객체를 관리하고 제공합니다.

 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

위의 출력 결과에서, 공유 객체의 내부 상태 (예 : 직업)는 동일하지만 외부 상태 (예 : 위치 및 건강)는 다르다는 것을 알 수 있습니다.