향 원 모드 (Flyweight Pattern)
4115 단어 디자인 모드
주요 해결: 대량의 대상 이 있 을 때 메모리 가 넘 칠 수 있 습 니 다. 우 리 는 그 중의 공 통 된 부분 을 추상 화하 고 똑 같은 업무 요청 이 있 으 면 메모리 에 있 는 대상 으로 돌아 가 다시 만 들 지 않도록 합 니 다.
언제 사용: 1. 시스템 에 대량의 대상 이 있 습 니까?2. 이 대상 들 은 대량의 메모 리 를 소모 합 니 다.3. 이들 대상 의 상 태 는 대부분 외부 화 할 수 있다.4. 이러한 대상 은 내 포 된 상태 에 따라 여러 조로 나 눌 수 있 으 며, 내 포 된 대상 을 대상 에서 제거 할 때 각 조 의 대상 은 하나의 대상 으로 대체 할 수 있다.5. 시스템 은 이러한 대상 의 신분 에 의존 하지 않 고 이런 대상 은 분별 할 수 없다.
어떻게 해결 합 니까? 유일한 표지 코드 로 판단 하고 메모리 에 있 으 면 이 유일한 표지 코드 가 표 시 된 대상 을 되 돌려 줍 니 다.
핵심 코드: 이 대상 들 을 HashMap 으로 저장 합 니 다.
인 스 턴 스: 1. JAVA 의 String, 있 으 면 되 돌려 주 고 없 으 면 문자열 캐 시 풀 에 저장 할 문자열 을 만 듭 니 다.2. 데이터베이스 의 데이터 풀.
장점: 대상 의 생 성 을 크게 줄 이 고 시스템 의 메모 리 를 낮 추어 효율 을 높 인 다.
단점: 시스템 의 복잡 도 를 향상 시 키 려 면 외부 상태 와 내부 상 태 를 분리 해 야 하고 외부 상 태 는 고유 화 된 성질 을 가지 기 때문에 내부 상태의 변화 에 따라 변화 해 서 는 안 되 며 그렇지 않 으 면 시스템 의 혼란 을 초래 할 수 있다.
사용 장면: 1. 시스템 에 대량의 유사 대상 이 있 습 니 다.2. 버퍼 가 필요 한 장면.
주의사항: 1. 외부 상태 와 내부 상 태 를 구분 하 는 것 을 주의 하 십시오. 그렇지 않 으 면 라인 안전 문 제 를 일 으 킬 수 있 습 니 다.2. 이런 유형 은 반드시 한 공장 대상 이 통제 해 야 한다.
인터페이스
package FlyweightPattern;
public interface Shape {
void draw();
}
package FlyweightPattern;
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);
}
}
도형 공장 류
package FlyweightPattern;
import java.util.HashMap;
public class ShapeFactory {
private static final HashMap 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;
}
}
원형 실현 류
package FlyweightPattern;
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);
}
}
클 라 이언 트 테스트 프로그램
package FlyweightPattern;
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);
}
}
참고:https://www.runoob.com/design-pattern/flyweight-pattern.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.