에릭 프리먼 님의 "헤드퍼스트 디자인 패턴" 책을 정리한 포스팅 입니다
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 |