Article-No.01 향원 모드
3676 단어 향원 모드
Flyweight 모드는 다른 유사한 대상과 데이터를 공유함으로써 메모리 사용을 줄이는 구조 모드 중 하나이다.즉, 한 시스템에 같은 대상이 여러 개 있다면 한 부만 공유하면 되고 한 부씩 실례화할 필요가 없다.Flyweight 모드에서는 다양한 대상이 생겨야 하기 때문에 Flyweight 모드에서 팩토리 모드가 자주 나타난다.Flyweight의 내부 상태는 공유하는 데 사용되며, Flyweight factory는 내부 상태의 대상을 저장하기 위해 대상 저장소(Flyweight Pool)를 유지한다.호출의 편의를 위해 FlyweightFactory 클래스는 일반적으로 Singleton 모드를 사용합니다.Flyweight 모드는 프로그램의 효율과 성능을 향상시키는 모드로 프로그램의 운행 속도를 크게 가속화시킬 수 있다.
2) Flyweight 모드의 유효성은 Flyweight 모드를 어떻게 사용하는지, 어디서 사용하는지에 따라 크게 달라집니다.Flyweight 모드는 다음과 같은 경우에 사용됩니다.
1. 한 응용 프로그램이 대량의 대상을 사용했다.
2. 대량의 대상을 사용하기 때문에 매우 큰 저장 비용을 초래한다.
3. 대상의 대부분 상태가 외부 상태로 바뀔 수 있다.
4. 객체 이외의 상태를 삭제하면 여러 그룹의 객체를 비교적 적은 공유 객체로 대체할 수 있습니다.
5. 응용 프로그램은 대상 표식에 의존하지 않는다.
예를 들어 한 카페에는 몇 가지 맛의 커피(라떼, 모카, 카푸치노 등)가 있는데 이 카페가 주문을 받으면 몇 십 잔의 커피가 필요하다.그러면 분명히 커피의 맛은 공유된 것으로 설정할 수 있고 한 잔에 따로 생성할 필요가 없다.코드는 다음과 같습니다.
package chapter05_flyWeightPattern;
public abstract class Order {
//
public abstract void sell();
}
package chapter05_flyWeightPattern;
import java.util.HashMap;
import java.util.Map;
public class FlavorFactory {
private Map<String, Order> flavorPools = new HashMap<String, Order>();
private static FlavorFactory flavorFactory;
private FlavorFactory() {
}
public static FlavorFactory getInstance() {
if(flavorFactory == null) {
flavorFactory = new FlavorFactory();
}
return flavorFactory;
}
public Order getOrder(String flavor) {
Order order = null;
if(flavorPools.containsKey(flavor)) {
order = flavorPools.get(flavor);
} else {
order = new FlavorOrder(flavor);
flavorPools.put(flavor, order);
}
return order;
}
public int getObjCoffee() {
return flavorPools.size();
}
}
package chapter05_flyWeightPattern;
public class FlavorOrder extends Order {
private String flavor;
public FlavorOrder(String flavor) {
this.flavor = flavor;
}
@Override
public void sell() {
System.out.println(" " + flavor + " ");
}
}
package chapter05_flyWeightPattern;
import java.util.ArrayList;
import java.util.List;
public class Client {
private static List<Order> orders = new ArrayList<Order>();
private static FlavorFactory flavorFactory;
private static void addOrder(String flavor) {
orders.add(flavorFactory.getOrder(flavor));
}
public static void main(String[] args) {
flavorFactory = FlavorFactory.getInstance();
addOrder(" ");
addOrder(" ");
addOrder(" ");
addOrder(" ");
addOrder(" ");
addOrder(" ");
addOrder(" ");
addOrder(" ");
addOrder(" ");
addOrder(" ");
addOrder(" ");
addOrder(" ");
addOrder(" ");
for(Order order : orders) {
order.sell();
}
System.out.println(" :" + orders.size() + " !");
System.out.println(" :" + flavorFactory.getObjCoffee() + " ");
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Article-No.01 향원 모드1) GoF가 형원 모델에 대한 설명은 공유 기술을 활용하여 대량의 세립도를 효과적으로 지원하는 대상이다. Flyweight 모드는 다른 유사한 대상과 데이터를 공유함으로써 메모리 사용을 줄이는 구조 모드 중 하나이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.