에릭 프리먼 님의 "헤드퍼스트 디자인 패턴" 책을 정리한 포스팅 입니다
1. 프로토타입 패턴
어떤 객체의 인스턴스를 만들 때 자원이 많이 들거나 복잡할 경우
장점
- 성능
- 기존 인스턴스를 복사 (생성 X)
- 클라이언트 코드에서 어떤 클래스의 인스턴스를 만드는지 모름
2. Game
Monster
// Prototype 인터페이스
public interface Monster extends Cloneable {
Monster clone();
void display(); // 몬스터의 모양을 화면에 표시
}
// 기본 몬스터 클래스
public class DefaultMonster implements Monster {
private String shape; // 몬스터의 모양
private String color; // 몬스터의 색상
private int speed; // 몬스터의 이동 속도
// 생성자
public DefaultMonster(String shape, String color, int speed) {
this.shape = shape;
this.color = color;
this.speed = speed;
}
@Override
public Monster clone() {
try {
return (Monster) super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
return null;
}
}
@Override
public void display() {
System.out.println("몬스터 모양: " + shape + ", 색상: " + color + ", 속도: " + speed);
}
// 몬스터의 속성 변경
public void setShape(String shape) {
this.shape = shape;
}
public void setColor(String color) {
this.color = color;
}
public void setSpeed(int speed) {
this.speed = speed;
}
}
Map
// 게임에서의 맵 환경
public class GameMap {
private Monster monsterPrototype;
// 맵 환경에 맞는 몬스터 초기화
public GameMap(Monster prototype) {
this.monsterPrototype = prototype;
}
public Monster createMonster() {
return monsterPrototype.clone();
}
public void updateMonsterForMap(String shape, String color, int speed) {
Monster newMonster = createMonster();
if (newMonster instanceof DefaultMonster) {
DefaultMonster defaultMonster = (DefaultMonster) newMonster;
defaultMonster.setShape(shape);
defaultMonster.setColor(color);
defaultMonster.setSpeed(speed);
defaultMonster.display();
}
}
}
- 객체 수정을 캡슐화
- 맵의 환경에 따라 몬스터 인스턴스의 상태가 변함
- 효율적
- 객체를 생성하지 않고 수정
'Java > Design Pattern' 카테고리의 다른 글
[헤드퍼스트 디자인 패턴] 12-6. 비지터 패턴 (0) | 2024.12.19 |
---|---|
[헤드퍼스트 디자인 패턴] 12-4. 플라이웨이트 패턴 (0) | 2024.12.19 |
[헤드퍼스트 디자인 패턴] 12-3. 책임 연쇄 패턴 (0) | 2024.12.19 |
[헤드퍼스트 디자인 패턴] 12-2. 빌더 패턴 (0) | 2024.12.19 |
[헤드퍼스트 디자인 패턴] 12-1. 브리지 패턴 (0) | 2024.12.18 |