原型模式 发表于 2019-10-22 | 分类于 PHP,设计模式 原型模式定义原型模式是一种创建者模式,其特点在于通过“复制”一个已经存在的实例来返回新的实例,而不是新建实例。 代码实现123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293<?php/** * Created by PhpStorm. * User: Livfer * Desc: * Date: 2019/10/21 * Time: 10:55 */interface Prototype{ public function copy(); public function deepCopy();}class ConcretePrototype implements Prototype{ private $name; public function __construct($name) { $this->name = $name; } public function setName($name) { $this->name = $name; } public function getName() { return $this->name; } /** * 浅拷贝 * 被拷贝的对象的所有变量都含有与原对象相同的值,且对其他对象的引用仍然只想原对象.即浅拷贝只拷贝当前对象的实例,对引用不拷贝 * @return ConcretePrototype */ public function copy() { // TODO: Implement copy() method. return clone $this; } /** * 深度拷贝 * 被拷贝的对象的其他所有变量都含有原对象的值,除了那些引用其他对象的变量.深拷贝将对其他引用的对象也拷贝为了一个新的对象,对其他对象引用的变量指向了这个新的拷贝对象 * @return mixed */ public function deepCopy() { // TODO: Implement deepCopy() method. $serializeObj = serialize($this); $cloneObj = unserialize($serializeObj); return $cloneObj; }}class Demo{ public $array;}class ClientPrototype{ public static function main() { $demo = new Demo(); $demo->array = [1,2]; $object1 = new ConcretePrototype($demo); $object2 = $object1->copy();//浅拷贝 echo "原对象: "; var_dump($object1->getName()); echo "<br />"; echo "浅拷贝对象: "; var_dump($object2->getName()); echo "<br />"; $object3 = $object1->deepCopy(); $demo->array = [3,4]; echo "原对象: "; var_dump($object1->getName()); echo "<br />"; echo "深度拷贝对象: "; var_dump($object3->getName()); }}ClientPrototype::main(); 参考设计模式详解及PHP实现