이 기사는 Xiangyuan Java 모드를 기반으로 Gozi Chess 게임 기능의 구현에 대해 설명합니다. 다음과 같이 참조에 대해 공유하십시오.
1. 패턴 정의
세계 모드는 공유 방식으로 수많은 세밀한 물체를 효율적으로 지원합니다. 메모리에 기존 객체를 다중화하여 객체 인스턴스 생성 시스템의 성능 소비를 줄입니다. Xiangyuan의 영어는 Flyweight입니다. 이것은 특히 작은 대상, 즉 세밀한 대상을 의미합니다.
2. 모델의 예
1. 패턴 분석
우리는이 패턴을 설명하기 위해 Gozi 게임을 빌립니다.
2. 즐기는 위안 모드의 정적 클래스 다이어그램
3. 코드 예제
3.1 추상 체스맨 생성
package com.demo.flyweight.object; public Abstract Class AbstractChessman {// ChessPaper Coordinates Protected Int X; 보호 된 in y; // 체스 페이퍼 카테고리 (검은 색 | 흰색) 보호 문자열 체스; Public AbstractChessman (String Chess) {this.chess = 체스; } // 포인트 좌표를 설정하여 공개 추상적 공극 포인트 (int x, int y); // ChessPaper 정보 show public void show () {System.out.println (this.chess + "(" + this.x + "," + this.y + "); }}3.2 Blackchessman 만들기
package com.demo.flyweight.object; Public Class Blackchessman Extends AbstractChessman { / ** * 생성자는 Black Chessman * / Public Blackchessman () {Super ( "●"); System.out.println ( "-Blackchessman Construction Exec !!!"); } // 포인트 좌표 설정 @override public void point (int x, int y) {this.x = x; this.y = y; // 체스 내용 표시 show (); }}3.3 Whitechessman을 만드십시오
package com.demo.flyweight.object; public class Whitechessman Extends Abstractchessman { / ** * 생성자는 White Chessman * / public whitechessman () {super ( "○"); System.out.println ( "-Whitechessman Construction Exec !!!"); } // 포인트 좌표 설정 @override public void point (int x, int y) {this.x = x; this.y = y; // Chess 조각 내용 show (); }}3.4 체스 맨 공장을 만듭니다
package com.demo.flyweight.factory; import java.util.hashtable; import com.demo.flyweight.object.abtractchessman; import com.demo.flyweight.object.blackchessman; import com.demo.flyweight.object.whitechessman; 공공 Classessmanformorforton Firtation Private FiveCessmanfortory Private FiveChessmanfortory Forctory Private FiveScessmanfortory Forctory Private Fivchessmanfortory fivechessmanfactory = 새로운 fivechessmanfactory (); // 공유 객체를 저장하는 캐시 개인 최종 해시 테이블 <문자, AbstractChessman> cache = new Hashtable <문자, AbstractChessman> (); // 민영화 생성자 개인 fivechessmanfactory () {} // 싱글 톤 공장 공개 정적 정적 fivechessmanfactory getInstance () {return fivechessmanfactory; } / ** * 캐릭터에 따라 체스 조각을 얻습니다 * * @param c * (b : black chessw : white chess) * @return * / public accestchessman getchessmanobject (char c) {// cache abstractchessman acbostrchessman = this.cache.get (c)에서 폰 객체의 인스턴스를 얻습니다. if (AbstractChessman == null) {// 캐시에 전당포 인스턴스 정보가없는 경우 전당포 인스턴스를 만들어 캐시 스위치 (c)에 넣습니다 (case 'b': accesschessman = new Blackchessman (); 부서지다; 사례 'W': AbstractChessman = New Whitechessman (); 부서지다; 기본값 : 브레이크; } // 불법 문자가 null을 입력하는 것을 방지하기 위해 if (AbstractChessman! = null) {// this.cache.put (C, AbstractChessman); }} // 캐시에 체스 객체가있는 경우 직접 AbstractChessman을 반환하십시오. }}3.5 클라이언트 구현
패키지 com.demo; import java.util.random; import com.demo.flyweight.factory.fivechessmanfactory; import com.demo.flyweight.abjert.abractchessman;/** * 메인 애플리케이션 * * @author */public class {/** * @param args */public static void main (string) {// create form fivechessmanfactory fivechessmanfactory = fivechessmanfactory .getInstance (); 랜덤 random = new random (); int radom = 0; AbstractChessman Abstractchessman = null; // 체스 조각을 가져옵니다 (int i = 0; i <10; i ++) {radom = random.nextint (2); 스위치 (Radom) {// 검은 체스 케이스 0 : AbstractChessman = fivechessmanfactory.getchessmanobject ( 'b'); 부서지다; // 흰색 체스 사례 1 : AbstractChessman = fivechessmanfactory.getchessmanobject ( 'w'); 부서지다; } if (AbstractChessman! = null) {AbstractChessman.point (i, random.nextint (15)); }}}}4. 운영 결과
-Whitechessman Construction Exec !!!
○ (0,2)
○ (1,6)
-Blackchessman Construction Exec !!!
● (2,3)
○ (3,14)
○ (4,13)
○ (5,8)
● (6,14)
● (7,0)
● (8,3)
○ (9,8)
3. 즐거움 모드의 두 상태
본질적인 상태 : 환경의 변화에 따라 변하지 않을 것이며, 이는 enctrinsic 객체의 내부 상태 정보에 저장됩니다. 이 고유 상태는 공유 될 수 있습니다. 모든 enctrinsic 객체의 경우 그 가치는 정확히 동일합니다. 고지의 "검은 조각"과 "흰색 조각"과 마찬가지로, 그것이 나타내는 상태는 내부 상태입니다.
외부 상태 : 환경의 변화에 따라 변화하므로 상태를 공유 할 수 없습니다. 속의 다른 물체의 경우 그 가치가 다를 수 있습니다. Xiangyuan 객체의 외부 상태는 클라이언트가 저장해야합니다. Xiangyuan 객체가 생성되고 사용 된 후에는 Xiangyuan 객체로 전달됩니다. Gozi의 위치 정보와 마찬가지로, 표현 된 상태는 생태의 대상의 외부 상태입니다.
따라서 Xiangyuan의 외부 및 내부 상태는 두 개의 독립 상태이며 서로 관련이 없습니다.
IV. 이 모델의 디자인 원리
1. 메모리 공간을 줄이기 위해 세밀한 물체를 공유하십시오.
2. 변화하는 부품과 시스템의 변하지 않은 부분을 효과적으로 분리하십시오.
5. 행사를 사용하십시오
1. 시스템에 특정 객체 유형의 인스턴스가 많이있을 때.
2. 시스템 설계에서 객체 인스턴스를 분류 한 후에는 실제 범주가 거의 없다는 것을 알 수 있습니다.
6. 즐기는 위안 모드의 정적 클래스 다이어그램
Java 알고리즘에 대한 자세한 내용은이 사이트에 관심이있는 독자들이 주제를 볼 수 있습니다. "Java 데이터 구조 및 알고리즘 자습서", "Java Operation Dom Node Tips 요약", "Java 파일 및 디렉토리 작동 팁 요약"및 "Java Cache Operation Tips의 요약"을 볼 수 있습니다.
이 기사가 모든 사람의 Java 프로그래밍에 도움이되기를 바랍니다.