你的位置:首页 > ASP.net教程

[ASP.net教程]PHP设计模式 原型模式(Prototype)


定义

和工厂模式类似,用来创建对象。但实现机制不同,原型模式是先创建一个对象,采用clone的方式进行新对象的创建。

场景

大对象的创建。

优点

1、可以在运行时刻增加和删除产品

2、可以改变值或结构以指定新对象

3、减少子类的构造

4、用类动态配置应用

缺点

Prototype是的最主要的缺点就是每一个类必须包含一个克隆方法;

而且这个克隆方法需要对类的功能进行检测,这对于全新的类来说较容易,但对已有的类进行改造时将不是件容易的事情;

要点

1、构建一个原型对象

2、对其进行初始化

3、对原型对象进行克隆操作

代码示例

简单实现

<?php/** * PHP设计模式 原型模式(prototype) * User: pyzn * Date: 2016-03-22 * Time: 14:08 *//** * Class Object * 一个结构复杂的对象原型 */class Object{  public function init()  {    //一些很占用系统资源的操作  }  public function run()  {  }}//常规方式$obj1 = new Object();$obj1->init();$obj1->run();$obj2 = new Object();$obj2->init();$obj2->run();//原型模式$prototype = new Object();$prototype->init();$obj1 = clone $prototype;$obj1->run();$obj2 = clone $prototype;$obj2->run();


 

复杂实现

原型模式

/** * PHP设计模式 原型模式(prototype)的复杂实现 * User: pyzn * Date: 2016-03-22 * Time: 14:08 *//** * Interface IPrototype * 声明一个克隆自身的接口,对原型角色的抽象 */interface IPrototype{  public function copy();}class PrototypeObject implements IPrototype{  private $name;  public function __construct($name)  {    $this->name = $name;  }  public function setName($name)  {    $this->name = $name;  }  public function getName()  {    return $this->name;  }  public function copy()  {    /*     * 浅copy     */    //return clone $this;    /*     * 深copy     */    $serializeStr = serialize($this);    $cloneObj = unserialize($serializeStr);    return $cloneObj;  }}class Client{  public static function main()  {    $prototype = new PrototypeObject("test");    $pro1 = $prototype->copy();    $pro2 = $prototype->copy();    $pro2->setName("test2");    var_dump($pro1);    var_dump($pro2);  }}Client::main();