본문 바로가기
Theory/Design Pattern

Prototype Pattern

by y.j 2022. 4. 23.
728x90

Prototype Pattern

Prototypical instance를 사용하여 create할 object의 종류를 명시해주고, prototype 복사하여 새로운 object를 생성한다.

run-time에 생성할 어떤 object를 명시하여 생성할 것인가?
클래스를 어떻게 동적으로 instantiation할 것인가?

prototype으로써 역할을 하기 위해서 object는 스스로를 copy할 수 있는 Prototype interface를 구현해야한다.

Solution

Prototype interface clone메서드를 정의하고 Product1에서 사용한다. Product1에서 clone을 통해 새로운 객체를 반환하도록 한다.

public class Product1 implements Prototype, Product {

    String name;

    public Product1(String name) {
        this.name = name;
    }

    public Product1(Product1 p) {
        this.name = p.getName();
    }

    @Override
    public Product clone() {
        return new Product1(this);
    }

    @Override
    public String getName() {
        return name;
    }
}

 

Advantage

• run-time에 동적으로 객체들을 제거하거나 추가하는 것이 가능하다.

• 동적으로 클래스들을 인스턴스화 하는 것이 가능하다.

   - 동적으로 loaded된 인스턴스들은 자동적으로 생성되고, prototype들을 등록 할 수 있다.

•  Factory Method의 대안책을 제공한다.

   - Prototype은 어떤 class를 인스턴스화 할지 subclass들을 필요로 하지 않는다.

     ( Factory Method는 상속에 의존하기 때문에 subclass가 필요하다. )

   - Prototype은 Factory Method가 작동하는 어디에서나 더 유동적으로 작용 할 수 있다.

 

Disadvantages

• clone operation의 구현이 복잡해질 수 있다. 특히, circular references가 있을 때 올바르게 작동하기 어려울 수 있다.

 

 

[전체 코드]

https://github.com/jKyounju/adapterPatterns/tree/master/src/PrototypePattern

728x90

'Theory > Design Pattern' 카테고리의 다른 글

Proxy Pattern  (0) 2022.04.24
Bridge Pattern  (0) 2022.04.24
Factory Method Pattern  (0) 2022.04.10
Builder Pattern  (0) 2022.03.29
ABSTRACT FACTORY PATTERN  (0) 2022.03.27

댓글