flyweight 패턴 예제

물론 이 패턴과 일반적인 범용 캐시 사이에는 복잡성과 구현에 몇 가지 주요 차이점이 있습니다. 플라이웨이트는 공장의 리포지토리에 저장됩니다. 고객은 플라이웨이트를 직접 만들지 못하게 하고 공장에서 요청합니다. 각 플라이급은 단독으로 설 수 없습니다. 플라이웨이트를 요청할 때마다 공유를 불가능하게 만드는 모든 특성은 클라이언트에서 제공해야 합니다. 컨텍스트가 “규모의 경제성”(즉, 클라이언트가 필요한 특성을 쉽게 계산하거나 조회할 수 있음)에 적합하다면 Flyweight 패턴은 적절한 레버리지를 제공합니다. 플라이웨이트 개체가 여러 스레드에서 만들어지는 시나리오에서는 특별한 사항을 고려해야 합니다. 값 목록이 유한하고 미리 알려진 경우 플라이웨이트는 미리 인스턴스화되고 경합없이 여러 스레드의 컨테이너에서 검색할 수 있습니다. 플라이웨이트가 여러 스레드에서 인스턴스화되는 경우 두 가지 옵션이 있습니다.

대신이 상태를 의존하는 특정 메서드에 전달해야합니다. 내장 상태만 개체 내에 유지되어 다른 컨텍스트에서 다시 사용할 수 있습니다. 따라서 이러한 개체는 외적 개체보다 훨씬 적은 변형을 가지는 본질적인 상태만 다르기 때문에 이러한 개체의 수가 줄어듭니다. 플라이웨이트 패턴은 구조설계 패턴 중 하나이며, 이 패턴은 객체 수를 감소시켜 애플리케이션에 필요한 객체 구조를 개선하는 방법을 제공한다. 플라이급 패턴은 많은 수의 유사한 개체를 만들어야 할 때 사용됩니다(예: 105). 플라이급 오브젝트의 중요한 특징 중 하나는 변경할 수 없다는 것입니다. 즉, 일단 생성된 후에는 수정할 수 없습니다. 요약하자면, 이 빠른 튜토리얼은 Java의 플라이웨이트 디자인 패턴에 중점을 두어 사용했습니다. 또한 패턴과 관련된 가장 일반적인 시나리오 중 일부를 체크 아웃했습니다. 본질및외신적 상태를 이해하기 위해 예를 들어 봅시다.

때때로 우리는 정말이 패턴을 볼 때 본질적인 및 외적 데이터에 대해 생각해야. 플라이웨이트 디자인 패턴을 적용하려면 개체 속성을 내재 및 외적 데이터로 나눕니다. 본질적인 데이터는 이 개체를 고유하게 만드는 데이터입니다. 그러나 외적 데이터는 인수를 통해 쉽게 전달 될 수있는 사용 가능한 정보입니다. 따라서 개체 수가 많은 인스턴스에 대해 일부 외인성 데이터를 렌더링할 수 있는 경우 Flyweight 디자인 패턴은 원하는 것과 거의 정확히 맞을 수 있습니다. 때때로 우리는 실제로이 패턴을 살펴 볼 때 본질적인 및 외적 데이터에 대해 생각해야합니다. 개체에 많은 외적 특성이 있고 약 100을 사용할 수 있다면 플라이급 팩토리에 이 모든 속성을 전달할 수 없기 때문에 플라이급 패턴을 사용할 필요가 없습니다. 이 예제에서는 포리스트(1.000.000 트리)를 렌더링합니다! 각 트리는 일부 상태(좌표, 텍스처 등)가 있는 자체 개체로 표시됩니다.