플라이급 모드 : 공유 기술을 통해 많은 수의 세밀한 물체를 효과적으로 지원할 수 있습니다.
즐겨 찾기 유안 모드는 간단한 즐겨 찾기 유안 모드로 나뉘어져 있으며 합성은 Yan Hong의 "Java and Mode"에서 Yuan Mode를 즐기십시오. 복합재는 복합 모드에서 Yuan을 즐기는 것을 공유 할 수 없습니다. 즐거움 위안 대상을 공유하는 열쇠는 내부와 외부 상태를 구별하는 것입니다. 이 두 "합의"는 이해하기가 너무 어렵습니다. 나는 번역이 좋지 않다고 말하지는 않지만 아마도 내 이해 능력이 좋지 않거나 "재사용 가능한 객체 지향 소프트웨어의 디자인 패턴 요소"의 번역 버전이 내부 및 외부 객체로 변환됩니다. 그것은 비교적 간단하며 너무 강한 개념적 사물의 문학적 냄새에 어색합니다. 여기의 문자는 또한 간단한 모드와 복합 모드를 구별하지 않지만 셰라우트 콘크리트 플라이 (SharedConcreteFlyweight) ( "Java 및 Mode"에서는 합성 즐거움을 공유 할 수 없음을 나타냅니다)를 가지고있는 "디자인 패턴 재사용 가능한 객체 지향 소프트웨어의 기본 사항"을 사용합니다. 우리는 여기서 즐거움 역할을 공유 할 수 없다고 말합니다. 이런 식으로, 즐거움 모드의 캐릭터는 다음과 같습니다.
Xiangyuan 모델 클래스의 제도적 다이어그램은 다음과 같습니다.
Java.lang.string Design에서 백과 사전 패턴을 사용할 때는 Java의 문자열이 다음 코드 스 니펫과 같이 항상 공유된다는 것을 알고 있습니다.
문자열 m = "a"; String n = "a"; System.out.println (m == n);
이것은 true를 출력하여 m과 n이 동일한 인스턴스를 가리키고 메모리에는 하나의 "a"만 있음을 나타냅니다. 이것이 쾌락 위안 모드가 문자열에서 사용되는 방법입니다.
텍스트 편집 및 스토리지 프로세스에서 Xiangyuan 모드 사용. 여기서 기사는 라인 객체로 구성되고 선 객체는 여러 문자 객체로 구성된다고 가정합니다. 그러나 각 캐릭터가 자체 객체를 저장하면 게시물에는 수천 개의 문자 객체가있어 시스템 메모리를 심각하게 소비하고 허용 할 수없는 런타임 오버 헤드를 유발합니다. 좋은 방법은 Xiangyuan 모드를 사용하여 ASCII 문자 인코딩 값 만 내부 변하지 않는 상태 로서만 ASCII 문자 인코딩 값을 저장하는 것입니다. 캐릭터 객체를 공유하며 상대 문자 색상 및 크기와 같은 형식의 데이터는 클라이언트가 유지 관리하며 런타임 동안 외부에서 전달할 수 있습니다. 각 행은 보편적 인 객체 (캐릭터 객체)로 구성된 비 공유 범용 객체입니다.
백과 사전 패턴의 간단한 구조의 예를 살펴 보겠습니다.
/ *** 편지*/ 공개 클래스 편지 {개인 문자열 이름; 공개 편지 (문자열 이름) {this.name = 이름; } public String getName () {return name; }} / ** * 문자 개체를 생성하는 Xiangyuan Factory (Singleton Factory) */ public class letterfactory {private map <string, letter> map; 개인 정적 문자 인스턴스 = 새 LetterFactory (); Private LetterFactory () {map = new Hashmap <문자열, 문자> (); } public static let } public void add (문자 문자) {if (letter! = null &&! map.containskey (let } system.out.println ( "map.size ====" + map.size ()); } 공개 편지 get (문자열 이름) {return map.get (이름); }} 공개 클래스 테스트 {public static void main (string [] args) {letterfactory factory = littractory.getInstance (); 문자열 word = "easiness"; AddletterByName (공장, Word); getletter (공장, 단어); } // 문자 추가 객체 추가 static void addletterbyName (letterfactory factory, string word) {for (char c : word.tocharray ()) {factory.add (새 문자 (c + ""); }} // 출력 문자 객체 정적 무효 GetLetter (문자 factory, string word) {for (char c : word.tocharray ()) {system.out.println (factory.get (c + ""); }}}인쇄:
Map.Size ==== 1 Map.Size === 2 Map.Size ==== 2 Map.Size ==== 3 Map.Size === 4 Map.Size ==== 5 Map.Size ==== 5 flyweight.letter@3343c8b3 flyweed.retter@272d7a10 flyweight.relter@3343c8b3c8b3c8b3c8b3c8b3c8b3c8b3c8b343c8b3c8b3c8b3c8b3c8b3c8b3c8b3c8b3c8b3c8b3c8b3c8b3c8b3c8b3 flyweight.letter@1aa8c488 flyweight.letter@3dfeca64 flyweight.letter@22998b08 flyweight.letter@1aa8c488