php设计模式原型模式,原型模式_设计模式_设计模式之原型模式 - Lane Blog
10
8
Clicks: 6614 Date: 2014-04-21 21:48:35 Power By 李軒Lane
原型模式提取重復(fù)功能,避免了程序員喜歡復(fù)制粘貼的壞習(xí)慣。設(shè)計(jì)模式中的原型模式就是,用原型實(shí)例指定創(chuàng)建對(duì)象的重力,通過拷貝這些原型來創(chuàng)建新的對(duì)象從一個(gè)對(duì)象再創(chuàng)建另外一個(gè)可定制的對(duì)象,而且不需要知道創(chuàng)建的任何細(xì)節(jié)。
淺復(fù)制 VS 深復(fù)制:
淺復(fù)制是對(duì)數(shù)字,字符串等類型進(jìn)行傳值復(fù)制,而對(duì)對(duì)象來講是引用復(fù)制,即只是對(duì)內(nèi)存地址進(jìn)行賦值而不是新建一個(gè)對(duì)象的變量。在淺復(fù)制中,對(duì)一個(gè)對(duì)象的屬性改變,另一個(gè)對(duì)象的該屬性也會(huì)被改變,類比于C語言的指針,PHP在調(diào)用方法時(shí)&$var的傳遞。
以PHP為代碼環(huán)境。
//家庭類
class Home{
public $money;
public function __construct($money){
$this->money = $money;
}
}
//家庭成員類
class member{
public $id;
public $name;
public $obj;
public function __construct($id, $name, Home $obj){
$this->setId($id);
$this->setName($name);
$this->obj = $obj;
}
public function setId($id){
$this->id = $id;
}
public function setName($name){
$this->name = $name;
}
public function display(){
echo 'ID為' . $this->id . ',名稱為' . $this->name . ',資產(chǎn)為' . $this->obj->money . '
';
}
public function __clone(){
//深度復(fù)制(克隆),因?yàn)榭寺≈荒芸寺?shù)字,字符串等,對(duì)對(duì)象變量是引用傳值。
$this->obj = clone $this->obj;
}
}
//客戶端/接口
$obj1 = new member(1, '小軒', new Home('10000'));
$obj1->display();
$obj2 = clone $obj1;
$obj2->setId(2);
$obj2->setName('小瑋');
$obj2->obj->money = 2000;
$obj2->display();
//根據(jù)這句輸出可以看到,對(duì)象1和對(duì)象2值是不一樣的,刪掉上面的注釋部分再看,又是一樣的了,這就是深復(fù)制和淺復(fù)制。
$obj1->display();
?>
總結(jié)
以上是生活随笔為你收集整理的php设计模式原型模式,原型模式_设计模式_设计模式之原型模式 - Lane Blog的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高中技校学计算机,我没考上高中,英语数学
- 下一篇: java手机音乐文件夹,从原始文件夹打开