// Fly Weight Design Pattern
// 속성이 동일한 객체가 다수 사용된다면 하나의 객체를 공유하여 사용하자.
// static, factory, map을 사용한 방법이 일반적
- class Image {
- private String url;
- public Image(String url) {
- this.url = url;
- // 이미지를 URL로 부터 다운로드 한다.
- try {
- Thread.sleep(5000);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- public void draw() {
- System.out.println("draw image : " + url);
- }
- }
- // Image를 전문으로 생성하는 factory
- // Factory : 객체의 생성을 한곳에서 중앙집중적으로 관리
- class ImageFactory {
- private static final ImageFactory INSTANCE = new ImageFactory(); //싱글톤
- public static ImageFactory getInstance() {
- return INSTANCE;
- }
- private ImageFactory(){}
- private Map<String, Image> imageMap = new WeakHashMap<>(); // 메모리가 부족할 때 자동으로 해지한다.
- public Image createImageFromUrl(String url) {
- if(!imageMap.containsKey(url)) {
- imageMap.put(url, new Image(url));
- }
- return imageMap.get(url);
- }
- }
- public class Ex1 {
- public static void main(String[] args) {
- ImageFactory imgF = ImageFactory.getInstance();
- Image img = imgF.createImageFromUrl("http://a.b.net/1");
- img.draw();
- Image img2 = imgF.createImageFromUrl("http://a.b.net/2");
- img2.draw();
- Image img3 = imgF.createImageFromUrl("http://a.b.net/1"); // 같은 url은 캐시
- img3.draw();
- }
- }
'java > design_pattern' 카테고리의 다른 글
ObserverPattern - 관찰자 패턴 (0) | 2014.07.01 |
---|---|
Factory method pattern (0) | 2014.06.27 |
Prototype Pattern (0) | 2014.06.27 |
State Pattern (0) | 2014.06.27 |
Decorator Pattern (0) | 2014.06.27 |