프로토타입 패턴
프로토타입 패턴은 생산비용이 높은 인스턴스를 복사하여 쉽게 생성하도록 하는 패턴입니다.
요구사항
그림 그리기 개발 툴에 어떤 모양(Shape)를 그릴 수 있도록 복사 붙여넣기 기능을 구현해라.
<조건>
대신 원을 복사할 때 좌표를 움직여라.
우선 Shape.java를 작성해줍니다. 이는 모양 클래스로 이를 원이든, 사각형이든 상속받을 클래스입니다.
package com.jeongchan.prototype;
public class Shape implements Cloneable{
String id;
public void setId(String id) {
this.id = id;
}
public String getId() {
return id;
}
}
즉 고유 아이디가 있습니다.
그 다음 Circle을 만들어주고 이를 Main에서 복사기능을 구현할 것입니다. 이것이 바로 프로토타입 패턴입니다.
Circle.java에는 반지름 , 좌표가 있고 Cloneable인터페이스를 구현하여 복사 기능을 구현합니다.
package com.jeongchan.prototype;
public class Circle extends Shape {
private int x,y,r;
public Circle(int x, int y, int r) {
super();
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 {
// TODO Auto-generated method stub
Circle circle = (Circle)clone();
circle.x = x+1;
circle.y = y+1;
return circle;
}
}
copy()메소드에서 Shape의 Cloneable를 이용하여 clone()메소드를 통해 복사해줍니다.
이는 깊은복사로 다음 게시글에서 얕은 복사와 깊은 복사의 차이점을 설명하겠습니다.
package com.jeongchan.prototype;
public class Main {
public static void main(String[] args) throws CloneNotSupportedException{
Circle circle1 = new Circle(1,1,3);
Circle circle2 = circle1.copy();
System.out.println(circle1.getX()+","+circle1.getY()+","+circle1.getR());
System.out.println(circle2.getX()+","+circle2.getY()+","+circle2.getR());
}
}
이제 메인에서 circle1을 만들어주고 복사기능을 copy()를 통해서 circle2를 만들어줍니다.
1,1,3
2,2,3
결과는 조건처럼 좌표가 1씩 이동해서 복사가 되는 것을 볼 수 있습니다.
'프로그래밍 언어 > Java' 카테고리의 다른 글
디자인패턴 - 빌더패턴(1) (0) | 2019.08.30 |
---|---|
디자인패턴-얕은복사&깊은복사 (0) | 2019.08.26 |
디자인패턴- 싱글톤 패턴 (0) | 2019.08.24 |
디자인패턴 - 전략패턴 (0) | 2019.08.23 |
디자인패턴-팩토리메소드 (0) | 2019.08.23 |