實現方式:
原型模式是先創建好一個原型對象,然後通過clone原型對象來創建新的對象。
何時使用:
原型模式適用於大對象的創建。創建一個大對象需要需要很大的開銷,如果每次new就會消耗很大,原型模式僅需內存拷貝即可,這樣就免去了類創建重複的初始化操作。
實例:
<?php
/**
*
* @authors mtg
* @date 2015-08-20 10:10:47
*/
class People {
public $name;
public $sex;
public $eye;
public $ear;
public $leg;
public $arm;
public $brain;
//一個人還需要其他各種屬性,一個完整的人的初始化工作時非常複雜的
function __construct($name,$sex,$eye,$ear,$leg,$arm,$brain){
$this->name=$name;
$this->sex=$sex;
$this->eye=$eye;
$this->ear=$ear;
$this->leg=$leg;
$this->arm=$arm;
$this->brain=$brain;
}
public function copy()
{
return clone $this;
}
public function _setname($name)
{
$this->name=$name;
}
public function _setsex($sex)
{
$this->sex=$sex;
}
//還有很多修改屬性的方法,此處省略;
public function appearance()
{
$it=$this->sex=="男孩"?'他':"她";
echo $this->name."是一個".$this->sex.",".$it."有".$this->arm."的胳膊和".$this->brain."的大腦.";
}
public function run()
{
echo $this->name."正在奔跑";
echo "</br>";
}
public function eat()
{
echo $this->name."正在吃飯";
echo "</br>";
}
//省略各種方法
}
$xiaoming=new People("小明","男孩","","","","強壯的","聰明");
$xiaoming->appearance();//小明是一個男孩,他有強壯的的胳膊和聰明的大腦.
$xiaoming->run();//小明正在奔跑
/*此處的作用是
*因爲一個人的初始化複雜,所以採用原型模式。
*/
$xiaoqiang=$xiaoming->copy();
$xiaoqiang->_setname('小強');//小強是一個男孩,他有強壯的的胳膊和聰明的大腦.
$xiaoqiang->appearance();
$xiaoqiang->run();//小強正在奔跑