반응형
객체를 생성하는데 비용? 시간이 많이 들고, 비슷한 객체가 이미 있는 경우 사용되는 패턴
- 원본 객체를 새로운 객체에 복사하여 필요에 따라 수정함
- clone 메소드를 사용함
- 생성 패턴
- clone 메소드를 사용 -> 생성하고자 하는 객체에 clone 에 대한 Override 필요
- 반드시 생성하고자 하는 객체의 클래스에 clone 메소드가 정의되어 있어야 함
[디자인패턴] 프로토타입패턴(Prototype Pattern) (velog.io)
package designPattern.prototype;
import java.util.ArrayList;
import java.util.List;
public class Employees implements Cloneable {
private List<String> empList;
public Employees() {
empList = new ArrayList<String>();
}
public Employees(List<String> list) {
this.empList = list;
}
public void loadData() {
empList.add("Ann");
empList.add("David");
empList.add("John");
empList.add("Methew");
}
@Override
public Object clone() throws CloneNotSupportedException {
List<String> temp = new ArrayList<>();
for (String str : this.empList) {
temp.add(str);
}
return new Employees(temp);
}
public List<String> getEmpList() {
return empList;
}
}
import java.util.List;
public class PrototypePattern {
public static void main(String[] args) throws CloneNotSupportedException {
Employees emps = new Employees();
emps.loadData(); // Ann, John, Methew...
Employees emps1 = (Employees) emps.clone();
Employees emps2 = (Employees) emps.clone();
List < String > list1 = emps1.getEmpList();
list1.add("Peter");
List < String > list2 = emps2.getEmpList();
list2.remove("John");
System.out.println("emps: " + emps.getEmpList());
System.out.println("emps1: " + list1);
System.out.println("emps2: " + list2);
}
}
console :
더보기
emps: [Ann, David, John, Methew]
emps1: [Ann, David, John, Methew, Peter]
emps2: [Ann, David, Methew]
반응형
'Java > Design Pattern' 카테고리의 다른 글
빌더 패턴 Builder (0) | 2023.01.17 |
---|---|
컴포짓 패턴 Composite (0) | 2023.01.16 |
템플릿 메소드 패턴 (0) | 2023.01.11 |
추상 팩토리 패턴 (0) | 2023.01.11 |
싱글톤 패턴 Singleton (0) | 2023.01.09 |