Free Lines Arrow
본문 바로가기
Design pattern/GoF(인강편)

[Design Pattern] Prototype Pattern

by skahn1215 2021. 11. 24.
728x90
반응형

Prototype Pattern

  • 인스턴스를 복사하여 새로운 객체를 만드는 패턴이다.
  • 인스턴스 생산 비용이 높을때 사용한다.
  • 클래스로부터 인스턴스 생성이 어려울때 사용한다.
  • 복사 붙여넣기 기능을 생각하면 이해하기 쉬울것 같다.

 

 

Prototype Pattern 구조

 

 

 

Prototype Pattern 구현

Shap class

  • Cloneable 은 기본적으로 제공되는 인터페이스이다.
package patterns.prototype;

public class Shape implements Cloneable {
    private String id;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }
}

 

Circle class

  • copy 함수에서 실제 clone 을 호출 하여 객체를 복사후 리턴해준다.
package patterns.prototype;

public class Circle extends Shape {
    private int x, y, r;

    public Circle(int x, int y, int r) {
        this.x = x;
        this.y = y;
        this.r = r;
    }

    public int getX() {
        return x;
    }

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

    public int getY() {
        return y;
    }

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

    public int getR() {
        return r;
    }

    public void setR(int r) {
        this.r = r;
    }

    public Circle copy () throws CloneNotSupportedException {
        Circle circle = (Circle)clone();
        return circle;
    }
}

 

Main Class

package patterns.prototype;

public class Main {
    public static void main(String[] args) throws CloneNotSupportedException {
        Circle circle1 = new Circle(10, 20,8);
        Circle circle2 = circle1.copy();

        System.out.println("circle1.X" + circle1.getX());
        System.out.println("circle2.X" + circle2.getX());
    }
}

 

결과

카피를 circle1 에 값을 넣어 준 뒤 copy를 통해 객체를 복사하였다.

circle1.X10
circle2.X10
728x90
반응형

댓글