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();//小强正在奔跑

你可能感兴趣的:(设计模式,PHP,原型模式)