에릭 프리먼 님의 "헤드퍼스트 디자인 패턴" 책을 정리한 포스팅 입니다
1. 플라이웨이트 패턴
- 객체를 최대한 재사용하여 메모리를 절약하는 디자인 패턴
- 인스턴스 하나로 여러 개의 가상 인스턴스를 제공하고 싶을 경우
구성 요소
Intrinsic State
- 여러 객체 간에 공유되는 상태
- 불변
Extrinsic State
- 공유되지 않고 개별 객체에 따라 달라지는 상태
- 호출 시 클라이언트가 전달
2. TreeManager
import java.util.ArrayList;
import java.util.List;
public class TreeManager {
private final List<TreeLocation> trees = new ArrayList<>();
// 나무 추가 (외재적 상태를 포함한 TreeLocation 객체 생성)
public void plantTree(int x, int y, String type, String color, String texture) {
Tree tree = TreeFactory.getTree(type, color, texture);
trees.add(new TreeLocation(x, y, tree));
}
// 모든 나무 표시
public void displayTrees() {
for (TreeLocation treeLocation : trees) {
treeLocation.display();
}
}
// TreeLocation: 외재적 상태와 플라이웨이트 Tree를 함께 보관
private static class TreeLocation {
private final int x; // 외재적 상태
private final int y; // 외재적 상태
private final Tree tree; // 내재적 상태를 가진 Tree 객체
public TreeLocation(int x, int y, Tree tree) {
this.x = x;
this.y = y;
this.tree = tree;
}
public void display() {
tree.display(x, y);
}
}
}
public class Tree {
private final String type; // 내재적 상태
private final String color; // 내재적 상태
private final String texture; // 내재적 상태
public Tree(String type, String color, String texture) {
this.type = type;
this.color = color;
this.texture = texture;
}
public void display(int x, int y) { // 외재적 상태는 메서드 호출 시 전달
System.out.println(
String.format("Tree [type=%s, color=%s, texture=%s] at (%d, %d)",
type, color, texture, x, y)
);
}
}
'Java > Design Pattern' 카테고리의 다른 글
[헤드퍼스트 디자인 패턴] 12-6. 비지터 패턴 (0) | 2024.12.19 |
---|---|
[헤드퍼스트 디자인 패턴] 12-5. 프로토타입 패턴 (0) | 2024.12.19 |
[헤드퍼스트 디자인 패턴] 12-3. 책임 연쇄 패턴 (0) | 2024.12.19 |
[헤드퍼스트 디자인 패턴] 12-2. 빌더 패턴 (0) | 2024.12.19 |
[헤드퍼스트 디자인 패턴] 12-1. 브리지 패턴 (0) | 2024.12.18 |