POOPOO: 배변 일기 앱
SMALL
생성패턴 목록
- 팩토리 메소드 패턴 (Factory Method Pattern)
- 추상 팩토리 패턴 (Abstract Factory Pattern)
- 싱글톤 패턴 (Singleton Pattern)
- 프로토타입 패턴 (Prototype Pattern)
- 빌더 패턴 (Builder Pattern)
- 오브젝트 풀 패턴 (Object Pool Pattern)
각 클래스의 메소드의 로직에 차이가 없고, 생성 시에 개체의 속성에만 차이가 있을 때 사용하는 것이 좋을 것 같다.
장점
- 서브 클래싱의 필요성을 줄입니다.
- 객체 생성의 복잡성을 숨깁니다.
- 클라이언트는 어떤 유형의 객체인지 모른 채 새로운 객체를 얻을 수 있습니다.
- 런타임에 객체를 추가하거나 제거할 수 있습니다.
사용시기
- 클래스가 런타임에 인스턴스화 되는 경우
- 객체 생성비용이 비싸거나 복잡한 경우
- 응용 프로그램의 클래스 수를 최소로 유지하려는 경우
- 클라이언트 응용프로그램이 객체 생성 및 표현을 인식하지 못하는 경우
UML
Prototype interface : Prototype
public interface Prototype{
public Prototype getClone();
}
Implement Class : EmployeeRecord
public class EmployeeRecord implements Prototype{
private int id;
private String name;
private String designation;
private double salary;
private String address;
public EmployeeRecord(){}
public EmployeeRecord(int id, String name, String designation, double salary, String address){
this();
this.id = id;
this.name = name;
this.designation = designation;
this.salary = salary;
this.address = address;
}
public void showRecord(){
System.out.println(id+"\t"+name+"\t"+designation+"\t"+salary+"\t"+address);
}
@Override
public Prototype getClone(){
return new EmployeeRecord(id,name,designation,salary,address);
}
}
Operation Class : PrototypeDemo
public class PrototypeDemo{
public static void main(String[] args) throws IOException {
int eid = 100301;
String ename = "홍길동";
String edesignation = "직함";
double esalary = 2000000;
String eaddress = "서울시 서초구";
EmployeeRecord e1=new EmployeeRecord(eid,ename,edesignation,esalary,eaddress);
e1.showRecord();
System.out.println("\n");
EmployeeRecord e2=(EmployeeRecord) e1.getClone();
e2.showRecord();
}
}
출처 : https://www.javatpoint.com/
LIST