学校网站 asp,wordpress 关键词 描述,wordpress 文章调用js,泊头哪给做网站的好一#xff0c;原型模式#xff0c;就是先创建好一个原型对象#xff0c;然后通过拷贝原型对象来生成新的对象。适用于大对象的创建#xff0c;因为每次new一个大对象会有很大的开销#xff0c;原型模式仅需内存拷贝即可。 原型模式中的主要角色#xff1a; 1#xff0c;…一原型模式就是先创建好一个原型对象然后通过拷贝原型对象来生成新的对象。适用于大对象的创建因为每次new一个大对象会有很大的开销原型模式仅需内存拷贝即可。 原型模式中的主要角色 1抽象原型Prototype角色声明一个克隆自身的接口。 2具体原型Concrete Prototype角色实现一个克隆自身的操作。 二浅拷贝、约深拷贝 浅拷贝被拷贝对象的所有变量都含有与原对象相同的值而且对其他对象的引用仍然是指向原来的对象。 即浅拷贝只负责当前对象实例对引用的对象不做拷贝。 深拷贝被拷贝对象的所有的变量都含有与原来对象相同的值除了那些引用其他对象的变量。那些引用其他对象的变量将指向一个被拷贝的新对象而不再是原有那些被引用对象。 即深拷贝把要拷贝的对象所引用的对象也都拷贝了一次而这种对被引用到的对象拷贝叫做间接拷贝。 三例子 //抽象原型
interface Prototype
{public function clone();public function deepClone();}//具体原型
class Concrete implements Prototype
{private $name;//浅拷贝public function clone(){return clone $this;}//深拷贝public function deepClone(){return unserialize(serialize($this));}public function set($name){$this-name $name;}public function get(){if (is_object($this-name)){echo $this-name-name.PHP_EOL;}else{echo $this-name.PHP_EOL;}}
}
class Name{public $name张三;
}//当被拷贝的对象有对象引用的时候
$obj new Concrete();
$objNamenew Name();
$obj-set($objName);
$objClone $obj-clone();
$objDeepClone $obj-deepClone();$obj-get();
$objClone-get();
$objDeepClone-get();
echo ---------------.PHP_EOL;$objName-name李四;
$obj-get();
$objClone-get();
$objDeepClone-get();
echo ---------------.PHP_EOL;//当被拷贝的对象只有属性变量$obj-set(王五);
$objClone $obj-clone();
$objDeepClone $obj-deepClone();$obj-set(小琴);
$obj-get();
$objClone-get();
$objDeepClone-get();
echo ---------------.PHP_EOL;/*输出
张三
张三
张三
---------------
李四
李四
张三
---------------
小琴
王五
王五
---------------*/