金华浦江网站建设,找产品厂家用哪个app,禁忌网站,网站做收付款接口作用#xff1a; 用原型实例指定创建对象的种类#xff0c;并且通过拷贝这些原型创建新的对象。 Prototype模式提供了一个通过已存在对象进行新对象创建的接口#xff08;Clone#xff09;#xff0c; Clone()实现和具体的语言相关#xff0c;在C中通过拷贝构造函数实现。… 作用 用原型实例指定创建对象的种类并且通过拷贝这些原型创建新的对象。 Prototype模式提供了一个通过已存在对象进行新对象创建的接口Clone Clone()实现和具体的语言相关在C中通过拷贝构造函数实现。 UML图如下 代码如下 Prototype.h 1 #ifndef _PROTOTYPE_H_2 #define _PROTOTYPE_H_3 4 /*Prototype模式提供了一个通过已存在对象进行新对象创建的接口Clone5 Clone()实现和具体的语言相关在C中通过拷贝构造函数实现6 7 作用:8 用原型实例指定创建对象的种类并且通过拷贝这些原型创建新的对象。9
10 */
11
12 /*Prototype原型基类定义Clone接口函数
13 */
14 class Prototype
15 {
16 protected:
17 Prototype();
18 public:
19 virtual Prototype* Clone() const0;//定义Clone接口根据不同的派生类来实例化对象
20 virtual ~Prototype();
21 };
22
23 //派生自Prototype实现其接口函数
24 class ConcretePrototype1:public Prototype
25 {
26 public:
27 ConcretePrototype1();//构造函数
28 ~ConcretePrototype1();//析构函数
29 ConcretePrototype1(const ConcretePrototype1);//拷贝构造函数
30 virtual Prototype* Clone() const;//实现基类定义的Clone接口内部调用拷贝构造函数实现复制功能
31 };
32
33 //派生自Prototype实现其接口函数
34 class ConcretePrototype2:public Prototype
35 {
36 public:
37 ConcretePrototype2();//构造函数
38 ~ConcretePrototype2();//析构函数
39 ConcretePrototype2(const ConcretePrototype2);//拷贝构造函数
40 virtual Prototype* Clone() const;//实现基类定义的Clone接口内部调用拷贝构造函数实现复制功能
41 };
42
43 #endif Prototype.cpp 1 #include Prototype.h2 #include iostream3 4 using namespace std;5 6 ////Prototype7 Prototype::Prototype()8 {9 coutPrototypeendl;
10 }
11
12 Prototype::~Prototype()
13 {
14 cout~Prototypeendl;
15 }
16
17 //ConcretePrototype1
18 ConcretePrototype1::ConcretePrototype1()
19 {
20 coutConcretePrototype1endl;
21 }
22
23 ConcretePrototype1::~ConcretePrototype1()
24 {
25 cout~ConcretePrototype1endl;
26 }
27
28 ConcretePrototype1::ConcretePrototype1(const ConcretePrototype1 cp)
29 {
30 coutConcretePrototype1 copyendl;
31 }
32
33 Prototype* ConcretePrototype1::Clone() const
34 {
35 return new ConcretePrototype1(*this);
36 }
37
38 //ConcretePrototype2
39 ConcretePrototype2::ConcretePrototype2()
40 {
41 coutConcretePrototype2endl;
42 }
43
44 ConcretePrototype2::~ConcretePrototype2()
45 {
46 cout~ConcretePrototype2endl;
47 }
48
49 ConcretePrototype2::ConcretePrototype2(const ConcretePrototype2 cp)
50 {
51 coutConcretePrototype2 copyendl;
52 }
53
54 Prototype* ConcretePrototype2::Clone() const
55 {
56 return new ConcretePrototype2(*this);
57 } main.cpp 1 #include Prototype.h2 #include iostream3 using namespace std;4 5 int main()6 {7 /*原型模式作用用原型实例指定创建对象的种类并且通过拷贝这些原型创建新的对象。8 Prototype模式重在从自身复制自己创建新类隐藏不需知道对象创建的细节9 */
10
11 /*1、用原型实例p1指定创建对象的种类ConcretePrototype1 */
12 Prototype* p1 new ConcretePrototype1();
13
14 /*2、通过拷贝这些原型创建新的对象 */
15 Prototype* p2 p1-Clone();
16
17 cout ------------------------ endl;
18
19 Prototype* p3 new ConcretePrototype2();
20 Prototype* p4 p3-Clone();
21
22 cout ------------------------ endl;
23
24 delete p1;
25 delete p2;
26 cout ------------------------ endl;
27
28 delete p3;
29 delete p4;
30
31 return 0;
32 } Prototype模式和Builder模式、AbstractFactory模式都是通过一个类对象实例来专门负责对象的创建工作工厂对象它们之间的区别是Builder模式重在复杂对象的一步步创建并不直接返回对象AbstractFactory模式重在产生多个相互依赖类的对象而Prototype模式重在从自身复制自己创建新类。