原型模式

4.原型模式

4.1 定义

  用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。

4.2 特点

  ■ 性能优良:原型模式是在内存二进制流的复制,要比直接new一个对象性能好,特别是在一个循环体内产生大量的对象时,原型模式可以更好地体现其优点。

  ■逃避构造函数的约束:这既是优点也是缺点,直接在内存中复制,构造函数是不会执行的,因此减少了约束,需要在实际应用时进行权衡考虑。

4.3 使用场景

  ■ 资源优化场景,类初始化需要消化非常多的资源,这个资源包括数据、硬件资源等。

  ■ 性能和安全要求的场景,通过new产生一个对象需要非常烦琐的数据准备或访问权限,可以使用原型模式。

  ■ 一个对象多个修改者的场景,一个对象需要提供给其他对象访问,而且各个调用者可能都需要修改其值时,可以考虑使用原型模式复制多个对象供调用者使用。

4.4 c++源码例程

 1 #include <iostream>
 2 using namespace std;
 3 //具体的实现类
 4 class Product
 5 {
 6 public:
 7     Product(int id, string name):m_id(id),m_name(name)
 8     {
 9         cout << "Product() id address:" << &m_id << endl;
10         cout << "Product() name address:" << &m_name << endl;
11     }
12 
13     //关键代码拷贝构造函数
14     Product(const Product& obj)
15     {
16         this->m_id = obj.m_id;
17         this->m_name = obj.m_name;
18         cout << "Product(const Product& obj) id address:" << &m_id << endl;
19         cout << "Product(const Product& obj) name address:" << &m_name << endl;
20     }
21     //关键代码克隆函数,返回return new Sheep(*this)
22     Product* clone()
23     {
24         return new Product(*this);
25     }
26     void show()
27     {
28         cout << "id  :" << m_id << endl;
29         cout << "name:" << m_name.data() << endl;
30     }
31 private:
32     int m_id;
33     string m_name;
34 };
35 int main()
36 {
37     Product* s1 = new Product(1, "abs");
38     s1->show();
39     Product* s2 = s1->clone();
40     s2->show();
41 
42     delete s1;
43     s1 = NULL;
44     delete s2;
45     s2 = NULL;
46     return 0;
47 }

 

posted @ 2020-11-03 14:42  昨日明眸  阅读(69)  评论(0)    收藏  举报