做網(wǎng)站價(jià)位軟件推廣平臺(tái)有哪些
一,原型模式,就是先創(chuàng)建好一個(gè)原型對(duì)象,然后通過(guò)拷貝原型對(duì)象來(lái)生成新的對(duì)象。適用于大對(duì)象的創(chuàng)建,因?yàn)槊看蝞ew一個(gè)大對(duì)象會(huì)有很大的開銷,原型模式僅需內(nèi)存拷貝即可。
原型模式中的主要角色:
1,抽象原型(Prototype)角色:聲明一個(gè)克隆自身的接口。
2,具體原型(Concrete?Prototype)角色:實(shí)現(xiàn)一個(gè)克隆自身的操作。
?二,淺拷貝、約深拷貝
淺拷貝:被拷貝對(duì)象的所有變量都含有與原對(duì)象相同的值,而且對(duì)其他對(duì)象的引用仍然是指向原來(lái)的對(duì)象。
即淺拷貝只負(fù)責(zé)當(dāng)前對(duì)象實(shí)例,對(duì)引用的對(duì)象不做拷貝。深拷貝:被拷貝對(duì)象的所有的變量都含有與原來(lái)對(duì)象相同的值,除了那些引用其他對(duì)象的變量。那些引用其他對(duì)象的變量將指向一個(gè)被拷貝的新對(duì)象,而不再是原有那些被引用對(duì)象。
即深拷貝把要拷貝的對(duì)象所引用的對(duì)象也都拷貝了一次,而這種對(duì)被引用到的對(duì)象拷貝叫做間接拷貝。
?三,例子
//抽象原型
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='張三';
}//當(dāng)被拷貝的對(duì)象有對(duì)象引用的時(shí)候
$obj = new Concrete();
$objName=new 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;//當(dāng)被拷貝的對(duì)象只有屬性變量$obj->set('王五');
$objClone = $obj->clone();
$objDeepClone = $obj->deepClone();$obj->set('小琴');
$obj->get();
$objClone->get();
$objDeepClone->get();
echo '---------------'.PHP_EOL;/*輸出
張三
張三
張三
---------------
李四
李四
張三
---------------
小琴
王五
王五
---------------*/