디자인 모델 - Flyweight 모델 에 대한 인식
3546 단어 디자인 모드
추상 적 인 향원 (Flyweight) 역할: 이 역할 은 모든 구체 적 인 향원 류 의 초 류 로 이런 유형 에 실현 해 야 할 공공 인 터 페 이 스 를 규정 한다.외부 상태 (External State) 가 필요 한 작업 은 상업 적 방법 을 호출 하여 매개 변수 로 들 어 갈 수 있다.
구체 적 인 향원 (Concrete Flyweight) 역할: 추상 적 인 향원 역할 에 규정된 인 터 페 이 스 를 실현 한다.내 포 된 상태 가 있다 면 내 포 된 상태 에 저장 공간 을 제공 하 는 것 을 책임 져 야 한다.향 원 대상 의 내포 상 태 는 대상 이 처 한 주변 환경 과 무관 하여 향 원 대상 이 시스템 에서 공유 할 수 있 도록 해 야 한다.
향 원 공장 (FlyweightFactory) 역할: 본 역할 은 향 원 역할 을 창설 하고 관리 합 니 다.본 캐릭터 는 향원 대상 이 시스템 에 의 해 적당 하 게 공유 되 는 것 을 보증 해 야 합 니 다.클 라 이언 트 대상 이 향 원 대상 을 호출 할 때 향 원 공장 역할 은 시스템 에 복합 적 으로 요구 하 는 향 원 대상 이 있 는 지 확인 합 니 다.만약 에 이미 있 으 면 향 원 공장 의 역할 은 기 존의 향 원 대상 을 제공 해 야 한다.시스템 에 적당 한 향 원 대상 이 없다 면 향 원 공장 역할 은 적당 한 향 원 대상 을 만들어 야 한다.
클 라 이언 트 (Client) 역할: 이 역할 은 모든 메타 대상 에 대한 인용 을 유지 해 야 합 니 다.본 캐릭터 는 모든 향원 대상 의 외 함 상 태 를 스스로 저장 해 야 합 니 다.
식당 에 서 는 레 시 피 에 필요 한 요리 가 있 으 면 사지 않 고 바로 요리 창고 에 가서 가 져 오고 없 으 면 사 러 가서 요리 창고 에 넣 어야 합 니 다.
public interface FlyWeight
{
public void buy(People people);
public String getFoodName();
public void setFoodName(String foodName);
}
public interface People
{
public void cooking(String foodName);
}
public class Food implements FlyWeight
{
private String foodName;
public void buy(People people)
{
people.cooking(foodName);
}
public String getFoodName()
{
return foodName;
}
public void setFoodName(String foodName)
{
this.foodName = foodName;
}
}
public class Kitchener implements People
{
public void cooking(String foodName)
{
System.out.println("cooking----"+foodName);
}
}
public class FlyWeightFactoy
{
private Hashtable<String, FlyWeight> storage = new Hashtable<String, FlyWeight>();
public FlyWeight getFood(String key)
{
FlyWeight food = (FlyWeight) storage.get(key);
if ( food == null )
{
food = new Food();
storage.put( key, food);
}
return food;
}
}
public class TestFlyWeight
{
public static void main(String[] args)
{
FlyWeightFactoy factory = new FlyWeightFactoy();
People people = new Kitchener();
FlyWeight meal = factory.getFood("Meal");
meal.setFoodName("Meal");
meal.buy(people);
}
}
향 원 모드 는 어떤 상황 에서 사용 해 야 합 니까?
아래 의 모든 조건 이 만족 할 때 향 원 모드 를 사용 하 는 것 을 고려 할 수 있다.
하나의 시스템 에는 대량의 대상 이 있다.
이 대상 들 은 대량의 메모 리 를 소모 한다.
이들 대상 의 상태 중 대부분 은 외부 화 할 수 있다.
이 대상 들 은 내 포 된 상태 에 따라 여러 그룹 으로 나 눌 수 있 으 며, 외 포 된 대상 을 대상 에서 제거 할 때 각 그룹 은 하나의 대상 으로 만 대체 할 수 있다.
소프트웨어 시스템 은 이들 대상 의 신분 에 의존 하지 않 는 다. 다시 말 하면 이들 대상 은 분별 할 수 없다.
이상 의 이러한 조건 을 만족 시 키 는 시스템 은 향원 대상 을 사용 할 수 있다.
마지막 으로 향 원 모드 를 사용 하려 면 시스템 에 기 존의 모든 향 원 을 기록 한 표를 유지 해 야 하 는데 이것 은 자원 을 소모 해 야 한다.따라서 공유 할 수 있 는 충분 한 향원 실례 가 있어 야 향원 모드 를 사용 할 수 있다.
향 원 모델 의 장점 과 단점:
메타 모드 의 장점 은 메모리 의 대상 수 를 대폭 줄 이 는 것 이다.그러나 이 를 위해 치 르 는 대가 도 높다.
향 원 모델 은 시스템 을 더욱 복잡 하 게 한다.대상 이 공유 할 수 있 도록 일부 상 태 를 외부 화 시 켜 프로그램의 논 리 를 복잡 하 게 해 야 한다.
향 원 모드 는 향 원 대상 의 상 태 를 외부 화하 고 외부 상 태 를 읽 으 면 운행 시간 이 약간 길 어 집 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.