设计模式:原型模式在c/c++中的实现方法,实现避免new关键字和构造函数的clone()函数
设计模式之原型模式:
实现一个clone()方法用来拷贝自己的现成数据,用于对同一份内容有极大需求量或构造某对象有极大成本时,c++里面图方便也能实现在拷贝构造函数里。
一、原型模式的作用:
1.资源优化
类初始化需要消耗非常多的资源,包括数据、硬件等
2.性能与安全要求
通过new产生一个对象需要非常繁琐的数据准备或访问权限,则可用原型模式
3.一个对象多个修改者
一个对象需要提供给其他对象访问,且各个调用着可能都需要访问其值或修改其值时。
二、原型模式的注意事项:
1.避免执行构造函数
2.自定义深浅拷贝
3.要clone(),就不能再成员变量上有final关键字
用法:先产生一个包含大量共有信息的类,后拷贝出副本,修正细节,简历一个完整的个性对象。
例如:产生一个人,可以不从一岁到二岁,到三岁…而是找一个人,获取DNA,克隆修改一下就是30岁了。
因此原型对象的实现方法很明显:
1.程序员自己实现clone():这个clone()的作用是完全复制自身的内容,按照具体情况实现深浅拷贝。
2.起到的作用是:代替new。
因为在c++或是JAVA中,new都是被封装好了的内存分配关键字,为了减少程序员的麻烦,new消耗了更多的内存去记录每个类对象的状态等额外内容,new调用构造函数的过程也会有资源损耗,因此将new作为工具实现clone()是本末倒置的行为。
3.实现clone()的方法:只需要在函数体内使用malloc分配新内存,程序员手动实现各个数据的拷贝就可,绕过new和环境配置对资源的消耗,即可大大提升优化水平和性能。
常见失误:在clone()方法中使用new构造新对象。
加入clone是为了避免new,调用new实现clone()本末倒置了。
代码实例:
class TestClass
{
public:
TestClass(int _data1, int _data2, int _data3, int _data4, int _data5, int _data6, int _data7):data1(_data1), data2(_data2), data3(_da