Design patterns
프로토 타입 패턴
수색…
소개
프로토 타입 패턴은 기존 프로토 타입 오브젝트를 복제하여 새 오브젝트를 작성하는 작성 패턴입니다. 프로토 타입 패턴은 객체 복사가 더 빠를 때 클래스의 인스턴스 생성 속도를 높입니다.
비고
프로토 타입 패턴은 창조적 인 디자인 패턴입니다. 생성 할 객체의 유형이 새로운 객체를 생성하기 위해 "복제 된" 프로토 타입 인스턴스에 의해 결정될 때 사용됩니다.
이 패턴은 클래스가 "다형성 (복사본) 생성자"를 필요로 할 때 사용됩니다.
프로토 타입 패턴 (C ++)
class IPrototype {
public:
virtual ~IPrototype() = default;
auto Clone() const { return std::unique_ptr<IPrototype>{DoClone()}; }
auto Create() const { return std::unique_ptr<IPrototype>{DoCreate()}; }
private:
virtual IPrototype* DoClone() const = 0;
virtual IPrototype* DoCreate() const = 0;
};
class A : public IPrototype {
public:
auto Clone() const { return std::unique_ptr<A>{DoClone()}; }
auto Create() const { return std::unique_ptr<A>{DoCreate()}; }
private:
// Use covariant return type :)
A* DoClone() const override { return new A(*this); }
A* DoCreate() const override { return new A; }
};
class B : public IPrototype {
public:
auto Clone() const { return std::unique_ptr<B>{DoClone()}; }
auto Create() const { return std::unique_ptr<B>{DoCreate()}; }
private:
// Use covariant return type :)
B* DoClone() const override { return new B(*this); }
B* DoCreate() const override { return new B; }
};
class ChildA : public A {
public:
auto Clone() const { return std::unique_ptr<ChildA>{DoClone()}; }
auto Create() const { return std::unique_ptr<ChildA>{DoCreate()}; }
private:
// Use covariant return type :)
ChildA* DoClone() const override { return new ChildA(*this); }
ChildA* DoCreate() const override { return new ChildA; }
};
이를 통해 기본 클래스 포인터에서 파생 클래스를 생성 할 수 있습니다.
ChildA childA;
A& a = childA;
IPrototype& prototype = a;
// Each of the following will create a copy of `ChildA`:
std::unique_ptr<ChildA> clone1 = childA.Clone();
std::unique_ptr<A> clone2 = a.Clone();
std::unique_ptr<IPrototype> clone3 = prototype.Clone();
// Each of the following will create a new default instance `ChildA`:
std::unique_ptr<ChildA> instance1 = childA.Create();
std::unique_ptr<A> instance2 = a.Create();
std::unique_ptr<IPrototype> instance3 = prototype.Create();
프로토 타입 패턴 (C #)
프로토 타입 패턴은 .NET의 ICloneable 인터페이스를 사용하여 구현할 수 있습니다.
class Spoon {
}
class DessertSpoon : Spoon, ICloneable {
...
public object Clone() {
return this.MemberwiseClone();
}
}
class SoupSpoon : Spoon, ICloneable {
...
public object Clone() {
return this.MemberwiseClone();
}
}
프로토 타입 패턴 (JavaScript)
Java, C # 또는 C ++와 같은 고전 언어에서는 클래스를 생성 한 다음 클래스에서 새 객체를 만들거나 클래스를 확장 할 수 있습니다.
자바 스크립트에서 먼저 객체를 생성 한 다음 객체를 확장하거나 객체를 새로 만들 수 있습니다. 그래서 JavaScript는 고전 언어보다 실제 프로토 타입을 보여줍니다.
예 :
var myApp = myApp || {};
myApp.Customer = function (){
this.create = function () {
return "customer added";
}
};
myApp.Customer.prototype = {
read: function (id) {
return "this is the customer with id = " + id;
},
update: function () {
return "customer updated";
},
remove: function () {
return "customer removed";
}
};
여기서 Customer
라는 객체를 만든 다음 새 객체 를 만들지 않고 prototype 키워드를 사용하여 기존 Customer object
를 확장했습니다. 이 기술을 프로토 타입 패턴이라고 합니다.
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow