[디자인 모델] 향원 모델 실현 (실현 절차 | 추상 향원 류 | 구체 향원 류 | 향원 공장 | 사용자 호출 | 코드 템 플 릿)
15932 단어 디자인 모드
1. 추상 향 원 류 를 정의 한다. 추상 류, 내부 상태, 외부 상태, 추상 적 인 방법 을 정의 한다.
① 추상 류: 이런 유형 은 추상 적 인 유형 으로 향 원 공장 류 와 사용자 호출 에서 관련 된 대상 유형 은 이 추상 적 인 유형 이 라 고 밝 히 고 구체 적 인 실현 류 를 직접 사용 하지 않 는 다.
② 내부 상 태 를 정의 합 니 다. 내부 상태 데 이 터 는 여러 개의 입자 대상 (사용자 가 실제 사용 하 는 1 만 개의 대상) 이 공유 하 는 정보 입 니 다. 공 유 는 대상 풀 에서 하나의 향 원 대상 (공유 대상) 을 유지 하 는 것 입 니 다. 여러 개의 입자 대상 이 향 원 공장 류 에서 이 향 원 대상 을 얻 을 때 이 향 원 대상 (공유 대상) 을 얻 습 니 다.이러한 입자 대상 (사용자 가 사용 하 는 대상) 이 사용 하 는 내부 상태 (데이터) 는 모두 같 을 것 이다.정의 할 때 이 상태 에 너무 관심 을 가지 지 않 고 내부 상태 와 외부 상 태 를 구분 하면 됩 니 다.
③ 외부 상 태 를 정의 한다. 이 상 태 는 매우 중요 하 다. 이 정 보 는 대상 풀 에서 대상 을 얻 는 근거 로 한다.즉, 외부 상태 가 같은 두 대상 은 대상 이 같다 는 것 을 설명 한다.
④ 추상 적 인 행 위 를 정의 한다. 메타 류 의 실제 조작 을 누 리 는 것 은 추상 적 인 방법 이자 최종 사용자 가 이 메타 류 를 호출 하 는 방법 이다.
2. 구체 적 인 향원 류 를 정의 한다. 추상 향원 류 를 계승 하고 추상 향원 류 의 추상 적 인 방법 을 실현 한다.
① 계승: 이런 추상 적 인 향 원 류 를 계승 하면 여러 개의 구체 적 인 향 원 류 를 정의 할 수 있다.
② 사용: 원류 대상 을 성명 할 때 원류 유형 을 추상 적 으로 향유 하고 실제 적 으로 이 대상 에 게 값 을 부여 할 때 구체 적 인 향유 원 류 를 부여 해 야 한다.
③ 대상 지 대상: 향 원 공장 류 중의 대상 지 는 서로 다른 구체 적 인 향 원 류 대상 을 저장 할 수 있 으 나 모두 추상 적 인 향 원 류 의 하위 대상 이 어야 한다.
3. 향 원 공장 클래스 정의:
① 정의 대상 풀: 대상 풀 은 일반적으로 Map 키 값 대 유형 으로 추상 적 인 메타 대상 의 외부 상태 데 이 터 를 키 로 하고 값 은 메타 대상 을 누 리 는 것 이다.
② 대상 가 져 오기 메커니즘: 사용자 가 외부 상태 에 따라 메타 대상 을 가 져 올 때 대상 풀 에서 메타 대상 이 존재 하 는 지 확인 하고 이 대상 이 존재 하지 않 으 면 이 대상 을 만 들 고 새로 만 든 대상 을 대상 풀 에 넣 고 메타 대상 을 되 돌려 줍 니 다.
4. 사용자 호출: 사용 자 는 향 원 공장 류 를 사용 하여 추상 적 인 향 원 류 유형 대상 을 만 들 고 구체 적 인 향 원 류 대상 을 부여 하 며 추상 적 인 방법 을 사용한다.
II. 향원 모드 추상 향원 류
1. 추상 적 인 향원 류 AbstractFlyweight 정의:
① 내부 상 태 를 정의 한다.
private String intrinsicState
내부 상태, 즉 여러 개의 입자 대상 (사용자 가 가지 고 있 는 여러 대상) 이 공유 하 는 정보 이다. 이 부분 은 우리 가 관심 을 가지 지 않 고 Getter 와 Setter 방법 을 설정 하면 된다.② 외부 상 태 를 정의 합 니 다:
protected final String externalState
외부 상 태 는 final 수식 을 사용 하 는 것 을 추천 합 니 다. 이것 은 구조 함수 밖의 곳 에서 이 값 을 수정 하지 않도록 하기 위해 서 입 니 다. 외부 상태 값 은 대상 이 만 들 때 만 값 을 부여 할 수 있 고 다른 때 는 이 값 을 수정 할 수 없습니다.③ 추상 적 인 행 위 를 정의 한다.
abstract void action()
이것 은 메타 류 의 구체 적 인 논리 로 구체 적 인 메타 역할 에서 이런 유형 을 실현 한다.2. 추상 적 인 메타 코드 예제:
package kim.hsl.design.flyweight;
/**
*
*/
public abstract class AbstractFlyweight {
/**
*
*/
private String intrinsicState;
/**
*
* final ① ②
*
*/
protected final String externalState;
public AbstractFlyweight(String externalState) {
this.externalState = externalState;
}
/**
*
*/
abstract void action();
/*
Getter Setter
*/
public String getIntrinsicState() {
return intrinsicState;
}
public void setIntrinsicState(String intrinsicState) {
this.intrinsicState = intrinsicState;
}
/**
*
*
* @return
*/
public String getExternalState() {
return externalState;
}
}
III. 향원 모드 구체 향원 류
1. 구체 적 인 향 원류 ConcreteFlyweight 정의:
① 계승: 이 종 류 는 AbstractFlyweight 추상 류 를 계승 한다.
② 구조 함수 재 작성: 추상 류 실현 류 는 구조 함수 재 작성 이 필요 하 다.
③ 추상 적 인 방법 을 실현 한다. 구체 적 인 향원류 에서 추상 적 인 향원류 중의 추상 적 인 행 위 를 실현 해 야 한다.
2. 구체 적 인 메타 코드 예제:
package kim.hsl.design.flyweight;
/**
*
* ,
*/
public class ConcreteFlyweight extends AbstractFlyweight {
public ConcreteFlyweight(String externalState) {
super(externalState);
}
@Override
void action() {
System.out.println(" , : " + externalState);
}
}
IV. 향 원 모드 향 원 공장
1. 향 원 공장 클래스 정의:
① 대상 풀: 향 원 공장 류 에서 정적 인 HashMap 데이터 구 조 를 유지 합 니 다. 이것 이 바로 대상 풀 이 메모리 에 있 는 데이터 구조 입 니 다. 키 String 데 이 터 는 원 류 를 누 리 는 외부 상태 이 고 향 원 대상 의 신분 표지 로 사용 되 며 모든 향 원 대상 의 이 외부 상태 값 이 다 릅 니 다.
② 대상 풀 에서 대상 획득: HashMap OBJECTPOOL 대상 풀 에서 AbstractFlyweight 추상 적 인 메타 대상 을 가 져 올 때 대상 풀 에 이 데이터 가 있 는 지 확인 하고 map. get () 을 사용 하여 가 져 온 메타 대상 이 비어 있 지 않 으 면 대상 풀 에 이 데이터 가 있 음 을 설명 하고 바로 돌아 가면 됩 니 다.map. get () 에서 가 져 온 향 원 대상 이 비어 있 으 면 대상 풀 에 이 대상 이 없다 는 것 을 설명 합 니 다. 이 대상 을 만 들 고 대상 풀 에 넣 고 돌아 가 야 합 니 다.외부 상 태 를 사용 하여 구조 함수 생 성 대상 에 전송 하 는 것 을 주의 하 십시오.
2. 향 원 공장 류 코드 예시:
package kim.hsl.design.flyweight;
import java.util.HashMap;
/**
*
*
*/
public class FlyweightFactory {
/**
*
* ,
*
* , , ,
* : :
*/
private static final HashMap<String, AbstractFlyweight> OBJECT_POOL = new HashMap<String, AbstractFlyweight>();
public static AbstractFlyweight getObject(String externalState){
//
ConcreteFlyweight object = (ConcreteFlyweight) OBJECT_POOL.get(externalState);
//
if(object == null){
object = new ConcreteFlyweight(externalState);
OBJECT_POOL.put(externalState, object);
System.out.println(" : " + externalState + " , ");
}else{
System.out.println(" , : " + externalState);
}
return object;
}
}
V. 향 원 모드 사용자 호출
1. 사용자 호출:
① 사용자 성명 대상 유형: 사용 자 는 AbstractFlyweight 가 원 류 를 추상 적 으로 누 리 는 대상 을 성명 하고 원 공장 류 의 대상 풀 에서 대상 을 얻는다.
② 새 대상: 대상 풀 에 대상 이 없 으 면 구조 함 수 를 호출 하여 이 대상 을 만 들 고 대상 풀 에 넣 고 이 대상 을 되 돌려 줍 니 다.
② 재 활용 대상: 대상 풀 에 이 향원 대상 이 있 으 면 스 레 드 풀 에서 이 대상 을 직접 가 져 와 되 돌려 줍 니 다.
2. 사용자 호출 코드 예제:
package kim.hsl.design.flyweight;
public class Main {
/**
* : ,
* @param args
*/
public static void main(String[] args) {
// "tom" , , ,
AbstractFlyweight tom = FlyweightFactory.getObject("tom");
tom.action();
// "tom" ,
AbstractFlyweight tom2 = FlyweightFactory.getObject("tom");
tom2.action();
// "Jerry" , , ,
AbstractFlyweight jerry = FlyweightFactory.getObject("Jerry");
jerry.action();
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.