在有些系统中,存在大量相同或相似对象的创建问题,如果用传统的构造函数来创建对象,会比较复杂且耗时耗资源,用原型模式生成对象就很高效,就像孙悟空拔下猴毛轻轻一吹就变出很多孙悟空一样简单。 ## 原型模式的定义与特点 原型(Prototype)模式的定义如下:用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。在这里,原型实例指定了要创建的对象的种类。用这种方式创建对象非常高效,根本无须知道对象创建的细节。例如,Windows 操作系统的安装通常较耗时,如果复制就快了很多。在生活中复制的例子非常多,这里不一一列举了。 **原型模式就是clone就是内存拷贝,比new的好处是创建对象快速,适合大对象创建** ## 原型模式的应用场景 原型模式通常适用于以下场景。 * 对象之间相同或相似,即只是个别的几个属性不同的时候。 * 创建对象成本较大,例如初始化时间长,占用CPU太多,或者占用网络资源太多等,需要优化资源。 * 创建一个对象需要繁琐的数据准备或访问权限等,需要提高性能或者提高安全性。 * 系统中大量使用该类对象,且各个调用者都需要给它的属性重新赋值。 ``` /** * PHP原型模式 * 先创建一个原型对象,然后通过clone原型对象来创建新的对象 * 这样可以避免类创建时重复的初始化操作。 * Class Prototype */ class Prototype { public function init() { //.....这里初始化工作 有200次循环复杂操作 } public function run() { //执行操作 } } //创建原型对象并初始化 $prototype = new Prototype(); $prototype->init(); //clone 原型对象 $obj1 = clone $prototype; $obj1->run(); //clone 原型对象 $obj2 = clone $prototype; $obj2->run(); ```