[자바 디자인 패턴] 생성패턴 - 프로토타입 패턴

2021. 3. 16. 01:53 JAVA/Design Patterns

생성패턴 목록

 

각 클래스의 메소드의 로직에 차이가 없고, 생성 시에 개체의 속성에만 차이가 있을 때 사용하는 것이 좋을 것 같다.

장점

- 서브 클래싱의 필요성을 줄입니다.

- 객체 생성의 복잡성을 숨깁니다.

- 클라이언트는 어떤 유형의 객체인지 모른 채 새로운 객체를 얻을 수 있습니다.

- 런타임에 객체를 추가하거나 제거할 수 있습니다.

 

사용시기

- 클래스가 런타임에 인스턴스화 되는 경우

- 객체 생성비용이 비싸거나 복잡한 경우

- 응용 프로그램의 클래스 수를 최소로 유지하려는 경우

- 클라이언트 응용프로그램이 객체 생성 및 표현을 인식하지 못하는 경우

 

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/

know-one-by-one.tistory.com/36