php設計模式之原型模式

實現方式:

原型模式是先創建好一個原型對象,然後通過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();//小強正在奔跑
發佈了40 篇原創文章 · 獲贊 0 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章