디자인 패턴에 대한 잡담(10) - 프로토타입 패턴

칼럼 소개

열 주소

링크

칼럼 소개

주로 현재 시중에 나와 있는 23가지 공통 디자인 패턴을 하나씩 분석하고 요약한 책이니, 관심 있는 친구들이 한 번 살펴보고 지속적으로 업데이트되길 바란다. 감독님이 저를 감독해 주시고 함께 배우고 발전할 수 있기를 바랍니다.
여기에 이미지 설명을 삽입하세요.

프로토타입 패턴

이는 클래스를 인스턴스화하는 대신 기존 객체를 복사하여 새 객체를 생성할 수 있도록 하는 생성 디자인 패턴입니다. 기존 객체의 속성과 메소드를 복제하여 새로운 객체를 생성함으로써 객체 생성 시 작업의 중복을 방지합니다.

여기에 이미지 설명을 삽입하세요.

역할 분류

추상 프로토타입(Prototype)

일반적으로 인터페이스 또는 추상 클래스인 복제 메서드를 정의하는 인터페이스입니다. 이 인터페이스는 프로토타입 객체를 복사하기 위한 복제 메서드를 선언합니다.

콘크리트 프로토타입

추상 프로토타입 인터페이스가 구현되고 복제 방법의 구체적인 구현이 제공됩니다. 특정 프로토타입 객체는 프로토타입 객체의 속성과 메소드를 복사하면서 복제 방법을 통해 새로운 객체를 생성합니다.

고객

clone 메소드를 호출하여 새 객체를 생성합니다. 클라이언트는 clone 메소드를 통해 프로토타입 객체를 복사한 후 필요에 따라 복제된 객체의 속성을 수정할 수 있습니다.

프로토타입 관리자

프로토타입 객체의 생성 및 복제 프로세스를 관리하는 데 사용됩니다. 프로토타입 관리자는 프로토타입 개체의 레지스트리를 유지할 수 있으며 클라이언트는 프로토타입 관리자를 통해 프로토타입 개체의 복제본을 얻습니다.

주요 아이디어

프로토타입 객체의 복제 메소드는 프로토타입 객체의 속성과 메소드를 복사하여 새로운 객체를 생성할 수 있습니다. 클라이언트는 필요에 따라 복제 방법을 통해 새로운 객체를 생성할 수 있으며, 복제된 객체의 속성을 자유롭게 수정할 수 있습니다. 프로토타입 패턴은 객체 생성의 효율성을 효과적으로 향상시키고 객체 생성 프로세스를 보다 유연하고 확장 가능하게 만듭니다.
여기에 이미지 설명을 삽입하세요.

자바 코드 구현

// 原型接口
interface Prototype {
    
    
    Prototype clone();
}

// 具体原型类
class ConcretePrototype implements Prototype {
    
    
    private String name;

    public ConcretePrototype(String name) {
    
    
        this.name = name;
    }

    public Prototype clone() {
    
    
        return new ConcretePrototype(this.name);
    }

    public void setName(String name) {
    
    
        this.name = name;
    }

    public String getName() {
    
    
        return this.name;
    }
}

// 客户端代码
public class Client {
    
    
    public static void main(String[] args) {
    
    
        // 创建原型对象
        Prototype prototype = new ConcretePrototype("原型对象");

        // 克隆原型对象
        Prototype clone = prototype.clone();

        // 修改克隆对象的属性
        ((ConcretePrototype) clone).setName("克隆对象");

        // 输出原型对象和克隆对象的属性
        System.out.println("原型对象的属性:" + prototype.getName());
        System.out.println("克隆对象的属性:" + ((ConcretePrototype) clone).getName());
    }
}

코드 분석

위의 예에서는 프로토타입 객체를 복제하기 위한 복제 메소드를 포함하는 프로토타입 인터페이스 Prototype을 정의합니다. 그런 다음 구체적인 프로토타입 클래스 ConcretePrototype을 만들고 Prototype 인터페이스를 구현하고 clone 메서드에 새 복제 객체를 반환했습니다.

클라이언트 코드에서는 프로토타입 객체 프로토타입을 생성한 다음 clone 메소드를 사용하여 새 객체 복제본을 복제합니다. 다음으로 clone 객체의 속성을 수정하고 프로토타입 객체와 clone 객체의 속성을 출력했습니다.
여기에 이미지 설명을 삽입하세요.

장점과 단점 분석

이점

객체 생성 단순화

프로토타입 모드는 프로토타입 객체를 복제하여 새로운 객체를 생성함으로써 반복적인 객체 생성 과정을 피하고 객체 생성 효율성을 향상시킵니다.

객체 생성 세부정보 숨기기

클라이언트는 객체 생성의 세부 사항을 신경 쓰지 않고 복제 방법을 통해 새로운 객체를 얻으므로 객체 생성 과정이 클라이언트에게 투명해집니다.

객체 속성의 동적인 추가 및 수정 지원

복제 객체는 프로토타입 객체에 영향을 주지 않고 프로토타입 객체와 독립적으로 수정될 수 있으므로 객체 생성이 더욱 유연하고 확장 가능해집니다.

객체를 생성하는 대체 방법을 제공합니다.

프로토타입 패턴은 객체를 생성하는 대체 방법으로 사용될 수 있으며, 특히 복잡한 객체나 광범위한 초기화가 필요한 객체를 생성하는 데 적합합니다.

결점

clone 메서드의 구현은 복잡할 수 있습니다.

객체의 속성이 복잡하거나 순환 참조 등의 문제가 있는 경우 복제 방법을 구현하는 것이 더 복잡해질 수 있습니다.

복제된 객체와 프로토타입 객체 간의 관계가 복잡할 수 있음

복제된 객체와 프로토타입 객체 사이에는 특정 관계가 있을 수 있으며, 이는 복제 메서드에서 처리되어야 하며 이로 인해 코드가 복잡해집니다.

복제 개체는 제한된 방식으로 생성됩니다.

복제된 객체의 생성 방법은 프로토타입 객체의 구조에 따라 제한되며, 프로토타입 객체가 복제 방법을 구현하는지, 복제 방법이 객체의 속성을 올바르게 복사할 수 있는지 확인하는 것이 필요합니다.
여기에 이미지 설명을 삽입하세요.

Je suppose que tu aimes

Origine blog.csdn.net/weixin_74888502/article/details/133466554
conseillé
Classement