디자인 모드 (22) - 향 원 모드
5330 단어 디자인 모드
대상 의 속성 은 보통 공유 속성 (예 를 들 어 직무, 등급, 부서) 과 개성 속성 (예 를 들 어 이름, id) 의 구분 이 있 습 니 다. 공유 속성의 값 은 수량 을 열거 하거나 예측 할 수 있 습 니 다. 대상 의 대량 중복 생 성 으로 인해 메모리 자원 의 낭 비 를 피하 기 위해 공유 속성 을 대상 으로 분리 할 수 있 고 개성 속성 을 방법 중의 매개 변수 로 전달 할 수 있 습 니 다. 이것 이 바로 향원 모델 입 니 다.
주: 디자인 모델 의 선 에서 예 를 들 면 적합 하지 않 습 니 다. 공유 속성 과 개성 속성 을 같은 대상 에 밀봉 하고 대상 이 개성 속성의 set 작업 이 발생 하면 반드시 전체 적 으로 볼 수 있 고 스 레 드 안전 문제 가 발생 합 니 다.
주: 전역 맵 에서 추출 한 대상 은 반드시 전역 공유 이 며, 모든 스 레 드 는 get 을 통 해 추출 한 대상 은 같은 대상 입 니 다.
예시
향 원 모드 응용 은 흔히 볼 수 있 습 니 다. 예 를 들 어 자바 의 문자열 대상 은 향 원 대상 이 고 문서 의 자모 도 향 원 대상 입 니 다.
1. 인터페이스
public interface Shape {
public void draw(int x,int y,int r);
}
2. 향원 대상
public class Circle implements Shape{
// ,x ,y ,r ,
private final String color; //
public Circle(String color){
this.color = color;
}
public String getColor(){
return this.color;
}
@Override
public void draw(int x,int y,int r) {
System.out.println(" : "+color+",x "+x+",y "+y+" "+r);
}
}
3. 향 원 공장
public class CircleFlyweightFactory {
// key, value
private final static HashMap flyweights = new HashMap();
public static Circle getCircle(String color){
Circle circle = null;
// , , , .
if(flyweights.containsKey(color)){
circle = flyweights.get(color);
}else{
synchronized(CircleFlyweightFactory.class){
if(!flyweights.containsKey(color)){
circle = new Circle(color);
flyweights.put(color, circle);
}
}
}
return circle;
}
}
4. 실행
public class Client {
public static void main(String[] args) {
Random random = new Random();
String[] colors = {" "," "," "};
for(int i=0;i<20;i++){
Shape circle = CircleFlyweightFactory.getCircle(colors[random.nextInt(3)]);
circle.draw(random.nextInt(100), random.nextInt(100), random.nextInt(100));
}
}
}
결과:
: ,x 4,y 51, 79
: ,x 44,y 72, 36
: ,x 63,y 10, 3
: ,x 42,y 25, 60
: ,x 92,y 16, 71
: ,x 28,y 61, 50
: ,x 68,y 28, 94
: ,x 89,y 4, 35
: ,x 24,y 46, 9
: ,x 81,y 56, 29
: ,x 39,y 71, 25
: ,x 52,y 74, 13
: ,x 59,y 6, 3
: ,x 27,y 90, 22
: ,x 50,y 44, 87
: ,x 63,y 83, 89
: ,x 70,y 80, 52
: ,x 83,y 80, 44
: ,x 11,y 48, 52
: ,x 31,y 48, 9
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.