>  기사  >  백엔드 개발  >  C++ 디자인 패턴과 프로토타입 패턴에 대한 간략한 소개

C++ 디자인 패턴과 프로토타입 패턴에 대한 간략한 소개

黄舟
黄舟원래의
2017-01-18 14:57:581315검색

정의: 프로토타입 인스턴스를 사용하여 생성할 객체의 유형을 지정하고, 이러한 프로토타입을 복사하여 새 객체를 생성합니다.

프로토타입 패턴은 실제로 생성에 대한 세부 사항을 알지 못한 채 객체에서 또 다른 사용자 정의 가능한 객체를 생성하는 것입니다.

프로토타입 모드는 주로 깊은 복사와 얕은 복사를 고려합니다. C++ 클래스 설계에서 복사 생성자는 얕은 복사이며 할당 연산자가 오버로드되면 깊은 복사입니다.

얕은 복사: 복사된 개체의 모든 변수는 원본 개체와 동일한 값을 포함하며 다른 개체에 대한 모든 참조는 여전히 원본 개체를 가리킵니다.

전체 복사: 참조 개체의 변수가 원래 참조 개체 대신 복사된 새 개체를 가리킵니다.

테스트 케이스:

[code]int main(){
    //生成对象
    ConcretePrototype * conProA = new ConcretePrototype();
    //复制自身
    ConcretePrototype *conProB = conProA->Clone();   //先clone后调用拷贝构造函数, Output: clone constructor

    delete conProA;
    conProA = NULL;

    delete conProB;
    conProB = NULL;

    return 0;
}

프로토타입 구현

[code]//接口
class Prototype{
public:
    Prototype(){}
    virtual ~Prototype(){}
    virtual Prototype *Clone() = 0;
};

//实现
class ConcretePrototype: public Prototype{
public:
    ConcretePrototype(): m_counter(0) {}
    virtual ~ConcretePrototype(){}
    //拷贝构造函数
    ConcretePrototype(const ConcretePrototype &rhs){
        std::cout << "constructor\n";
        m_counter = rhs.m_counter;
    }

    //复制自身
    virtual ConcretePrototype *Clone(){
        //调用拷构造函数
        std::cout << "clone\n";
        return new ConcretePrototype(*this);
    }

private:
    int m_counter;
};

위는 C++ 디자인 패턴의 프로토타입 모드에 대한 내용이며, 더 많은 관련 내용은 PHP를 참고해주세요. 중국사이트(www.php.cn)!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.