学习资料 圣杰的 原型模式
当我们new一个对象的时候 会进行计算 算要多少开销 这些会消耗性能。同样的 当我们克隆一个对象的时候 也会消耗性能,但是这个比new少很多。
在做群发短信 群发邮件的时候,很多内容都是相同的,只有发送地址和对发送人的称呼是不同的。
使用克隆的方法 可以把相同的内容也克隆进来,又提高了性能。 在大批量群发的时候 ,对性能是非常有用的。
圣杰的原型模式写的很简略,还有一篇文章写的好一些 设计模式系列-原型模式
在这篇文章里面说到了 原型模式使用的3个情况 并且介绍了浅复制和深复制
1.比如我在查询数据库的时候得到了一个dataTable,我想做个副本,如果用传统new的方式 我要新建一个dataTable,然后for循环其中的列,将这些逐个add到新建的dataTable中,代码更多 性能也不好
2.针对某一个对象,想看对它进行处理之后 与处理之前的变化(比如在orm框架中,修改了一个对象的几个列,我们想在update数据的时候只更新那几个被修改了的列,这是个比方,也许orm框架还有更好的方法)就应该使用原型模式。
3.当我们想快速创建一个跟已有对象差不多的对象的时候,我们可以用原型模式快速创建一个副本,然后稍微做一下修改。
原型模式的对象往往要实现ICloneable接口,这样对象直接Clone出副本,默认.net是提供了一个memberwishclone方法给所有的对象,但是这个方法实现的是浅拷贝,也就是说对值对象创建了个新的版本,对引用对象只是复制了引用。
原型模式没有规定说,复制必须是浅拷贝 ,还是深拷贝,都可以,看你怎么实现