이전 기사 "PHP의 프록시 모드(정방향 프록시 및 역방향 프록시)에 대해 이야기"에서 PHP의 프록시 모드를 소개했습니다. 이 기사에서는 PHP 디자인 패턴의 플라이웨이트를 이해하도록 안내합니다.
플라잉 달러 모드, "플라잉 달러"라는 단어는 실제로 중국어로 특별한 의미가 없으므로 분해하여 살펴 봐야합니다. "Xiang"은 공유를 의미하고 "Yuan"은 특정 요소를 공유한다는 것을 이해하기 쉬운 것 같습니다.
GoF 정의: 공유 기술을 사용하여 다수의 세분화된 개체를 효과적으로 지원
GoF 클래스 다이어그램
코드 구현
rrre 에공유 인터페이스 및 그 구현을 정의합니다. 여기에는 두 가지 구현이 있습니다. ConcreteFlyweigh는 상태를 공유하고, UnsharedConcreteFlyweight는 공유하지 않거나 해당 상태를 공유할 필요가 없습니다.
interface Flyweight { public function operation($extrinsicState) : void; } class ConcreteFlyweight implements Flyweight { private $intrinsicState = 101; function operation($extrinsicState) : void { echo '共享享元对象' . ($extrinsicState + $this->intrinsicState) . PHP_EOL; } } class UnsharedConcreteFlyweight implements Flyweight { private $allState = 1000; public function operation($extrinsicState) : void { echo '非共享享元对象:' . ($extrinsicState + $this->allState) . PHP_EOL; } }
공유해야 하는 객체를 저장하고 공장으로 사용합니다. 필요한 공유 객체를 생성하여 동일한 키 값을 가진 고유한 객체만 있도록 하여 동일한 객체 생성 비용을 절약합니다
class FlyweightFactory { private $flyweights = []; public function getFlyweight($key) : Flyweight { if (!array_key_exists($key, $this->flyweights)) { $this->flyweights[$key] = new ConcreteFlyweight(); } return $this->flyweights[$key]; } }
클라이언트 호출을 통해 외부 상태 $extrinsicState를 각 객체 간에 공유할 수 있습니다
전체 코드: https://github.com/zhangyue0503/designpatterns-php/blob/master/13.flyweights/source/flyweights.php
Example
전체 소스 코드: https://github.com/zhangyue0503/designpatterns-php/blob/master/13.flyweights/source/flyweights-message.php
$factory = new FlyweightFactory(); $extrinsicState = 100; $flA = $factory->getFlyweight('a'); $flA->operation(--$extrinsicState); $flB = $factory->getFlyweight('b'); $flB->operation(--$extrinsicState); $flC = $factory->getFlyweight('c'); $flC->operation(--$extrinsicState); $flD = new UnsharedConcreteFlyweight(); $flD->operation(--$extrinsicState);
설명
코드가 좀 많지만 실제로는 2가지 종류의 클래스가 있고 4가지 종류의 객체가 생성됩니다. 각 클래스의 다양한 개체는 템플릿에 따라 구별됩니다. 이 조합은 매우 편리합니다. 다른 모드와 결합하여 공장을 최적화할 수 있습니다.
플라이웨이트 모드는 시스템에 유사한 객체가 많이 있고 버퍼 풀이 필요한 시나리오에 적합합니다. 메모리 사용량을 줄이고 효율성을 향상시킬 수 있지만 복잡성이 증가하고 내부 및 외부 상태를 공유해야 합니다. 주요 특징은 고유한 로고가 있다는 점으로, 해당 객체가 메모리에 이미 존재하는 경우 다시 생성하지 않고 해당 객체를 직접 반환합니다추천 학습: "PHP 비디오 튜토리얼"
위 내용은 한 기사에서 PHP의 플라이급 패턴에 대해 알아보세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!