原型模式
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 }
我心自有明月在,不堕地狱不跪佛

浙公网安备 33010602011771号