// Fly Weight Design Pattern

// 속성이 동일한 객체가 다수 사용된다면 하나의 객체를 공유하여 사용하자.

// static, factory, map을 사용한 방법이 일반적


  1. class Image {
  2.         private String url;
  3.  
  4.         public Image(String url) {
  5.                 this.url = url;
  6.  
  7.                 // 이미지를 URL로 부터 다운로드 한다.
  8.                 try {
  9.                         Thread.sleep(5000);
  10.                 } catch (Exception e) {
  11.                         e.printStackTrace();
  12.                 }
  13.         }
  14.  
  15.         public void draw() {
  16.                 System.out.println("draw image : " + url);
  17.         }
  18. }
  19.  
  20. // Image를 전문으로 생성하는 factory
  21. // Factory : 객체의 생성을 한곳에서 중앙집중적으로 관리
  22. class ImageFactory {
  23.         private static final ImageFactory INSTANCE = new ImageFactory(); //싱글톤
  24.         public static ImageFactory getInstance() {
  25.                 return INSTANCE;
  26.         }
  27.         private ImageFactory(){}
  28.         private Map<String, Image> imageMap = new WeakHashMap<>(); // 메모리가 부족할 때 자동으로 해지한다.
  29.        
  30.         public Image createImageFromUrl(String url) {
  31.                 if(!imageMap.containsKey(url)) {
  32.                         imageMap.put(url, new Image(url));
  33.                 }
  34.                 return imageMap.get(url);
  35.         }
  36. }
  37. public class Ex1 {
  38.         public static void main(String[] args) {
  39.                 ImageFactory imgF = ImageFactory.getInstance();
  40.                
  41.                 Image img = imgF.createImageFromUrl("http://a.b.net/1");
  42.                 img.draw();
  43.  
  44.                 Image img2 = imgF.createImageFromUrl("http://a.b.net/2");
  45.                 img2.draw();
  46.  
  47.                 Image img3 = imgF.createImageFromUrl("http://a.b.net/1"); // 같은 url은 캐시
  48.                 img3.draw();
  49.         }
  50.  
  51. }


'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

+ Recent posts