플라이급 패턴을 사용하는 목적은 불필요한 객체 초기화를 피하여 공간을 절약하는 것입니다. GOF 에 의해 정의 된 것처럼 객체는 내재 상태와 외재 상태의 두 가지 상태를 가질 수 있습니다.
- 고유 상태 : 플라이급에 저장됩니다. 플라이급 상황과 독립적 인 정보로 구성되어 공유 할 수 있습니다.
- 외부 상태 : 플라이급의 상황에 따라 달라 지므로 공유 할 수 없습니다. 클라이언트 객체는 외부 상태를 필요할 때 플라이급으로 전달합니다.
각 열에 모든 텍스트 행이 포함되고 행에 문자가 포함될 수있는 간단한 텍스트 편집기 응용 프로그램을 개발한다고 가정합니다.
여기서 딜레마는 Character 클래스를 디자인하는 방법입니다. char c
문자 클래스 내에서 메인 (고유 상태) 객체이어야한다. 그러나 문자는 글꼴 및 크기 (외부 상태)를 가질 수 있습니다. 따라서 외부 상태를 Row (클라이언트)에 저장하고 필요할 때 액세스해야합니다. 이를 위해 글꼴과 크기를 저장하는 두 개의 목록이 작성됩니다.
Flyweight 패턴을 따라 문자를 재사용 할 수 있으며 모든 ASCII 기호 ( Character
개체) 를 포함하는 특정 개체 목록 (flyweight pool)에서 개체를 참조하고 있습니다.
다음은 시각적으로 설명한 내용입니다.
'hello'를 인쇄 Character
하려면 5 대신 4 개의 개체 만 필요합니다. 글꼴이 변경되면 새 개체가 필요하지 않습니다. 이 점에 유의 하지 않을 것이다 가능한 우리는, 예를 들어, 문자 클래스의 외부 상태를 저장했다
class Character
{
char c;
int Size;
Font font;
....
}
큰 데이터 세트에이 패턴을 적용 하면 응용 프로그램의 메모리 복잡성과 개체 재사용 성 이 크게 최적화 됩니다.