디자인 모드향 원 디자인 모드 (flyweight)
6858 단어 flyweight
public class FlyweightDemo {
public static void main(String[] args) {
Integer m = 127;
Integer n = 127;
System.out.println(m==n);// true,
Integer a = Integer.valueOf(323);
Integer b = Integer.valueOf(323);
System.out.println(a==b);
}
}
대상 을 대상 으로 하 는 프로 그래 밍 언어 로 볼 때 모든 사 무 는 대상 (Object) 으로 묘사 된다.대상 은 상태 (속성) 와 행위 (방법) 를 가지 고 있 습 니 다. 우 리 는 같은 행 위 를 가 진 대상 을 클래스 (Class) 로 추상 화 합 니 다. 클래스 는 행위 만 유지 하 는 대상 템 플 릿 으로 볼 수 있 고 클래스 는 실행 할 때 상태 데 이 터 를 다시 부여 하여 대상 을 형성 할 수 있 습 니 다.
실행 할 때 대상 은 상태 데 이 터 를 저장 하기 위해 일정한 메모리 공간 을 차지한다.특별한 처 리 를 하지 않 으 면 같은 종류 로 생 성 된 두 대상 임 에 도 불구 하고 이 두 대상 의 상태 데 이 터 는 똑 같 지만 메모리 에 두 개의 공간 을 차지 합 니 다. 이러한 상황 은 프로그램의 기능 에 영향 을 주지 않 을 수도 있 습 니 다. 그러나 상태 가 같은 같은 대상 을 메모리 에 합 친다 면반드시 저장 공간의 낭 비 를 크게 줄 일 것 이다.
현실 적 인 예 를 들 어 한 타 오 바 오 점 에서 잘 팔 리 는 여성 용 구 두 를 운영 하고 매일 대량의 주문 정 보 를 처리 해 야 한다. 주문 에 고객 이 구 매 한 구두 정 보 를 표시 해 야 한다. 우 리 는 구두 제품 을 추상적으로 추정한다.
class Shoe{
String color;//
int size;//
String position;//
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
}
위의 코드 에서 설명 한 바 와 같이 구 두 는 색깔, 사이즈, 재고 위치 세 가지 상태 데이터 로 나 뉜 다.그 중에서 색깔 과 사 이 즈 는 구두 의 자연 상태 로 우 리 는 대상 내부 상태 라 고 부 르 는데 이런 상태 데 이 터 는 대상 자체 와 만 관련 되 고 외부 환경의 변화 에 따라 변화 하지 않 는 다.다시 재고 위 치 를 보면 우 리 는 이 상 태 를 대상 의 외부 상태 라 고 부른다. 외부 상 태 는 대상 자체 와 필연 적 인 관계 가 없고 외부 상 태 는 항상 외부 환경의 변화 로 인해 변화 한다. 즉, 외부 상 태 는 외부 환경 에 의 해 결정 된다.이 사례 에서 구 두 는 오늘 A 창고 에 두 고 내일 B 창고 에 둘 수 있 지만 어느 창고 에 보관 하 든 같은 구 두 는 같은 구두 로 보관 위치 에 따라 색깔 과 사 이 즈 는 달라 지지 않 는 다.
향 원 모드 의 핵심 사상 은 내부 상태 가 같은 대상 을 저장 할 때 캐 시 하 는 것 이다.즉, 같은 색 의 같은 사이즈 의 구 두 는 메모리 에 하나의 인 스 턴 스 만 저장 하고 대상 을 방문 할 때 대상 캐 시 버 전 을 방문 하 는 것 이지 매번 대상 을 다시 만 드 는 것 이 아 닙 니 다.
향 원 모드 는 대상 이 외부 속성 을 가지 도록 허용 합 니 다. 우리 가 방문 하 는 것 은 항상 대상 캐 시 버 전 이기 때문에 대상 을 사용 하기 전에 외부 상 태 를 대상 에 다시 주입 해 야 합 니 다.향 원 모드 는 새로운 대상 생 성 을 금지 하기 때문에 향 원 모드 를 사용 할 때 공장 방법의 응용 이 수반 된다.우 리 는 아래 의 예 를 살 펴 보 자.
class ShoeFactory {
Collection<Shoe> shoes = new ArrayList<Shoe>();
Shoe getSheo(String color, int size, String position) {
//
for (Shoe shoe : shoes) {
if (shoe.getColor() == color && shoe.getSize() == size) {
//
shoe.setPosition(position);
return shoe;
}
}
//
Shoe shoe = new Shoe();
shoe.setColor(color);
shoe.setSize(size);
shoe.setPosition(position);
shoes.add(shoe);
return shoe;
}
}
Shoe Factory 공장 을 통 해 우리 가 매번 받 는 구 두 는 캐 시 버 전 입 니 다. 캐 시 에 우리 가 필요 로 하 는 대상 이 없 으 면 새로 대상 을 만 들 고 캐 시 에 넣 습 니 다.상례 에서 대상 의 외부 속성 position 가 대상 을 어떻게 되 돌려 주 는 지 주의 하 십시오.www.2cto.com
우리 가 자신의 업무 장면 에서 향 원 모드 를 응용 할 때 반드시 대상 의 내부 상태 와 외부 상 태 를 구분 해 야 한다. 향 원 모드 는 캐 시 버 전 은 대상 의 내부 상태 만 포함 할 수 있 음 을 강조 한다.
사실 자바 의 String 과 Integer 류 는 모두 메타 모드 의 응용 예 입 니 다. String 류 내 부 는 모든 문자열 대상 을 캐 시 합 니 다. 같은 문자열 은 메모리 에 한 버 전 만 유지 합 니 다.이와 유사 하 게 Integer 류 는 내부 에서 255 이하 의 정수 에 대해 서도 캐 시 를 진행 했다.
향 원 모델 이 기업 급 구조 디자인 에서 응용 되 는 사례 가 비 일비 재 하 다. 현대 대형 기업 급 응용 에서 없어 서 는 안 되 거나 없어 서 는 안 되 는 캐 시 시스템 도 바로 향 원 모델 을 바탕 으로 점차적으로 완선 되 고 발전 한 것 이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모드 1 일 1 연: 형 원 모드 (Flyweight)Flyweight 모드 는 공유 기술 을 활용 하여 대량의 입자 도 대상 을 효과적으로 지원 합 니 다.게임 개발 에서 향 원 모델 의 전형 적 인 응용 은 동적 으로 비트 맵 글꼴 을 생 성 하 는 것 이다. PS...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.