pattern

Flyweight pattern

easy16 2018. 7. 20. 14:23

Flyweight pattern


-생성되는 객체의 수를 감소시키고, 메모리 사용량을 감소시켜 performance를 증대 시킴.

-객체 구조를 향상시키고 갯수를 감소시키는 structural pattern.

-이미 존재하는 유사한 객체를 저장하고 재사용함, 만일 매칭되는 객체가 없을 경우에 객체를 생성함.


Main 호출 부



	Circle s = (Circle) ShapeFactory.getCircle("red");

	s.setRadius(10);
	s.setX(10);
	s.setY(10);
	s.draw();

	s=(Circle)ShapeFactory.getCircle("green");

	s.setRadius(9);
	s.setX(9);
	s.setY(9);
	s.draw();

	s=(Circle)ShapeFactory.getCircle("blue");
	
	s.setRadius(11);
	s.setX(11);
	s.setY(11);
	s.draw();

	s=(Circle)ShapeFactory.getCircle("red");
	s.draw();
	s=(Circle)ShapeFactory.getCircle("green");
	s.draw();
	s=(Circle)ShapeFactory.getCircle("blue");
	s.draw();


ShapeFactory를 아래와 같이 구성한다. CircleMap을 두어 class level에서 생성된 Circle객체를 관리한다. 이미 생성된 적이 있는 객체의 경우는 다시 객체 생성을 하지 않는다. 

ShapeFactory.java
public class ShapeFactory  {

    private static HashMap CircleMap = new HashMap();
    public static Shape getCircle(String color){
        Circle circle = (Circle)CircleMap.get(color);

        if (circle == null){
            circle = new Circle(color);
            CircleMap.put(color, circle);
            Log.d("shape", "Create circle : color ="+color);

        }
        return circle;
    }
}


나머지:
public interface Shape {
    void draw();
}

public class Circle implements Shape {
    private String color;
    private int x;
    private int y;
    private int radius;


    public Circle(String color){
        this.color=color;
    }


    private final String TAG = Circle.class.getSimpleName();
    @Override
    public void draw() {
        Log.d(TAG, "Circle color ="+color+" x :"+x+" y :"+y + " radius : "+radius);
    }

    public void setX(int x) {
        this.x = x;
    }

    public void setY(int y) {
        this.y = y;
    }

    public void setRadius(int radius) {
        this.radius = radius;
    }
}

결과:


07-20 14:18:00.288 12348 12348 D shape   : Create circle : color =red

07-20 14:18:00.288 12348 12348 D Circle  : Circle color =red x :10 y :10 radius : 10

07-20 14:18:00.288 12348 12348 D shape   : Create circle : color =green

07-20 14:18:00.288 12348 12348 D Circle  : Circle color =green x :9 y :9 radius : 9

07-20 14:18:00.288 12348 12348 D shape   : Create circle : color =blue

07-20 14:18:00.288 12348 12348 D Circle  : Circle color =blue x :11 y :11 radius : 11

07-20 14:18:00.288 12348 12348 D Circle  : Circle color =red x :10 y :10 radius : 10

07-20 14:18:00.288 12348 12348 D Circle  : Circle color =green x :9 y :9 radius : 9

07-20 14:18:00.288 12348 12348 D Circle  : Circle color =blue x :11 y :11 radius : 11


참조 : 

https://www.tutorialspoint.com/design_pattern/flyweight_pattern.htm