JAVA 디자인 모델 의 향원 모델 에 대해 논 하 다.

메모리 사용량 을 줄 이 고 성능 을 향상 시 키 기 위해 메타 모드(Flyweight Pattern)를 사용 합 니 다.이런 유형의 디자인 모델 은 구조 형 모델 로 대상 의 수량 을 줄 이 고 응용 에 필요 한 대상 구 조 를 개선 하 는 방식 을 제공 했다.
향 원 모드 는 기 존의 같은 대상 을 다시 사용 하려 고 시도 합 니 다.일치 하 는 대상 을 찾 지 못 하면 새 대상 을 만 듭 니 다.우 리 는 5 개의 대상 을 만들어 서로 다른 위치 에 분포 되 어 있 는 원 20 개 를 그 려 서 이 모델 을 보 여줄 것 이다.사용 가능 한 색상 이 5 가지 밖 에 없 기 때문에 color 속성 은 기 존의 Circle 대상 을 검사 하 는 데 사 용 됩 니 다.
소개 하 다.
의도:
공유 기술 을 활용 하여 대량의 입자 도 를 효과적으로 지원 하 는 대상.
주요 해결:
대량의 대상 이 있 을 때 메모리 가 넘 칠 수 있 습 니 다.우 리 는 그 중의 공 통 된 부분 을 추상 화하 고 똑 같은 업무 요청 이 있 으 면 메모리 에 있 는 대상 으로 돌아 가 다시 만 들 지 않도록 합 니 다.
언제 사용 할 지:
1.시스템 에 대량의 대상 이 있다.
2.이 대상 들 은 대량의 메모 리 를 소모 합 니 다.
3.이들 대상 의 상 태 는 대부분 외부 화 할 수 있다.
4.이러한 대상 은 내 포 된 상태 에 따라 여러 조로 나 눌 수 있 으 며,내 포 된 대상 을 대상 에서 제거 할 때 각 조 의 대상 은 하나의 대상 으로 대체 할 수 있다.
5.시스템 은 이러한 대상 의 신분 에 의존 하지 않 고 이런 대상 은 분별 할 수 없다.
어떻게 해결 합 니까?
유일한 표지 코드 로 판단 하고 메모리 에 있 으 면 이 유일한 표지 코드 가 표 시 된 대상 을 되 돌려 줍 니 다.
키 코드:
HashMap 으로 이 대상 들 을 저장 합 니 다.
인 스 턴 스 적용:
1.JAVA 의 String,있 으 면 되 돌려 주 고 없 으 면 문자열 캐 시 풀 에 저장 할 문자열 을 만 듭 니 다.
2.데이터베이스 의 데이터 풀.
장점:
대상 의 생 성 을 크게 줄 이 고 시스템 의 메모 리 를 낮 추어 효율 을 높 인 다.
단점:
시스템 의 복잡 도 를 높이 려 면 외부 상태 와 내부 상 태 를 분리 해 야 하고 외부 상 태 는 고유 화 된 성질 을 가지 기 때문에 내부 상태의 변화 에 따라 변화 해 서 는 안 되 며 그렇지 않 으 면 시스템 의 혼란 을 초래 할 수 있다.
사용 필드:
1.시스템 에 대량의 유사 대상 이 있다.
2.버퍼 가 필요 한 장면.
주의사항:
1.외부 상태 와 내부 상 태 를 구분 하 는 것 에 주의 하 십시오.그렇지 않 으 면 라인 안전 문 제 를 일 으 킬 수 있 습 니 다.
2.이런 유형 은 반드시 한 공장 대상 이 통제 해 야 한다.
이루어지다
우 리 는 Shape 인 터 페 이 스 를 만 들 고 Shape 인 터 페 이 스 를 실현 하 는 실체 클래스 Circle 을 만 들 것 입 니 다.다음 단 계 는 공장 류 Shape Factory 를 정의 하 는 것 이다.
Shape Factory 에는 Circle 의 HashMap 이 있 습 니 다.그 중에서 Circle 대상 의 색 을 입력 하 십시오.언제든지 요청 을 받 으 면 특정 색상 의 원 을 만 듭 니 다.ShapeFactory 는 HashMap 의 circle 대상 을 검사 하고 Circle 대상 을 찾 으 면 이 대상 을 되 돌려 줍 니 다.그렇지 않 으 면 hashmap 에 저 장 된 새로운 대상 을 만 들 고 이 대상 을 클 라 이언 트 로 되 돌려 줍 니 다.
FlyWeight PatternDemo,우리 의 프 리 젠 테 이 션 클래스 는 Shape Factory 를 사용 하여 Shape 대상 을 가 져 옵 니 다.필요 한 대상 의 색상 을 얻 기 위해 ShapeFactory 에 정보(red/green/blue/black/white)를 전달 합 니 다.

단계 1
인 터 페 이 스 를 만 듭 니 다.

public interface Shape {
  void draw();
}
단계 2
인 터 페 이 스 를 실현 하 는 실체 클래스 를 만 듭 니 다.

public class Circle implements Shape {
  private String color;
  private int x;
  private int y;
  private int radius;
 
  public Circle(String color){
   this.color = color;   
  }
 
  public void setX(int x) {
   this.x = x;
  }
 
  public void setY(int y) {
   this.y = y;
  }
 
  public void setRadius(int radius) {
   this.radius = radius;
  }
 
  @Override
  public void draw() {
   System.out.println("Circle: Draw() [Color : " + color 
     +", x : " + x +", y :" + y +", radius :" + radius);
  }
}
단계 3
공장 을 만 들 고 주어진 정 보 를 기반 으로 하 는 실체 류 의 대상 을 생 성 합 니 다.

import java.util.HashMap;
 
public class ShapeFactory {
  private static final HashMap<String, Shape> circleMap = new HashMap<>();
 
  public static Shape getCircle(String color) {
   Circle circle = (Circle)circleMap.get(color);
 
   if(circle == null) {
     circle = new Circle(color);
     circleMap.put(color, circle);
     System.out.println("Creating circle of color : " + color);
   }
   return circle;
  }
}
단계 4
이 공장 을 이용 해 색상 정 보 를 전달 함으로써 실체 류 의 대상 을 얻는다.

public class FlyweightPatternDemo {
  private static final String colors[] = 
   { "Red", "Green", "Blue", "White", "Black" };
  public static void main(String[] args) {
 
   for(int i=0; i < 20; ++i) {
     Circle circle = 
      (Circle)ShapeFactory.getCircle(getRandomColor());
     circle.setX(getRandomX());
     circle.setY(getRandomY());
     circle.setRadius(100);
     circle.draw();
   }
  }
  private static String getRandomColor() {
   return colors[(int)(Math.random()*colors.length)];
  }
  private static int getRandomX() {
   return (int)(Math.random()*100 );
  }
  private static int getRandomY() {
   return (int)(Math.random()*100);
  }
}
단계 5
실행 프로그램,출력 결과:
Creating circle of color : Black
Circle: Draw() [Color : Black, x : 36, y :71, radius :100
Creating circle of color : Green
Circle: Draw() [Color : Green, x : 27, y :27, radius :100
Creating circle of color : White
Circle: Draw() [Color : White, x : 64, y :10, radius :100
Creating circle of color : Red
Circle: Draw() [Color : Red, x : 15, y :44, radius :100
Circle: Draw() [Color : Green, x : 19, y :10, radius :100
Circle: Draw() [Color : Green, x : 94, y :32, radius :100
Circle: Draw() [Color : White, x : 69, y :98, radius :100
Creating circle of color : Blue
Circle: Draw() [Color : Blue, x : 13, y :4, radius :100
Circle: Draw() [Color : Green, x : 21, y :21, radius :100
Circle: Draw() [Color : Blue, x : 55, y :86, radius :100
Circle: Draw() [Color : White, x : 90, y :70, radius :100
Circle: Draw() [Color : Green, x : 78, y :3, radius :100
Circle: Draw() [Color : Green, x : 64, y :89, radius :100
Circle: Draw() [Color : Blue, x : 3, y :91, radius :100
Circle: Draw() [Color : Blue, x : 62, y :82, radius :100
Circle: Draw() [Color : Green, x : 97, y :61, radius :100
Circle: Draw() [Color : Green, x : 86, y :12, radius :100
Circle: Draw() [Color : Green, x : 38, y :93, radius :100
Circle: Draw() [Color : Red, x : 76, y :82, radius :100
Circle: Draw() [Color : Blue, x : 95, y :82, radius :100
이상 은 JAVA 디자인 모델 의 향 원 모델 에 대한 상세 한 내용 입 니 다.JAVA 향 원 모델 에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 해 주 십시오!

좋은 웹페이지 즐겨찾기