原型模式是clone 一个原型,那为什么不用单例模式呢? 这样也很省资源啊~
clone 不仅仅是克隆一个对象, 而是把对象的初始化属性也克隆了, 而单例模式只是 防止重复实例化对象.
两幅画,两幅图,如果用单例的话,这个数据$data应该是静态共享的,效果应该就是先画了图1,然后======,画图2的时候,是以图1中的$data数据为基础来留空白的,这样图2的效果就成了,一块画布,两个矩形重叠的样子。
单例模式比较常见是到创建一个实例化对象,但是原型模式还带有一系列的初始化操作。
单例模式是整个程序中某个类只存在一个对象,所有对该对象的改动都会被引用。很显然,作用跟原型模式是不一样的,虽然单例模式最省内存。原型模式可以创建出来某个对象的N个实例,只是创建的方法用clone而不是new,省去了初始化过程的大量开销。所以,原型模式与单例模式的作用与场景都是不同的。
原型模型使用的场景是,创建新对象成本较大时可以利用已有的对象进行复制来获得,从而降低创建对象的代价,原型模式隐藏了创建对象的复杂性。只需要知道要创建对象的类型,然后通过请求就可以获得和该对象一模一样的新对象,无须知道具体的创建过程。使用的目的是创建新对象,而不是获取同一个对象实例,而且可以进行浅拷贝和深拷贝,单例模式创建的对象都是同一个,该模式只创建了一个对象,而不能创建新的对象。