原型模式
2017-07-12 本文已影响30人
零一间
<?php
/*
* 原型模式
* 先创建好一个原型对象,然后通过clone原型对象来创建新的对象。
* 适用于大对象的创建,因为创建一个大对象需要很大的开销,
* 如果每次new就会消耗很大,原型模式仅需内存拷贝即可。
*/
interface Prototype {
function shallowCopy();
function deepCopy();
}
class ConcretePrototype implements Prototype {
public $username;
public function setUserName($userName) {
$this->username = $userName;
}
public function getUserName() {
return $this->username;
}
/**
* 浅拷贝
* @return ConcretePrototype
*/
function shallowCopy() {
return clone $this;
}
/**
* 深拷贝
* @return mixed
*/
function deepCopy(){
$serialize_obj = serialize($this);
$clone_obj = unserialize($serialize_obj);
return $clone_obj;
}
}
浅拷贝:
被拷贝对象的所有变量都含有与原对象相同的值,而且对其他对象的引用仍然是指向原来的对象,即浅拷贝只负责当前对象实例,对引用的对象不做拷贝。
深拷贝:
被拷贝对象的所有的变量都含有与原来对象相同的值,除了那些引用其他对象的变量,那些引用其他对象的变量将指向一个被拷贝的新对象,而不再是原来那些被引用的对象。即深拷贝把要拷贝的对象所引用的对象也拷贝了一次。而这种对被引用到的对象拷贝叫做间接拷贝。