定义
和工厂模式类似,用来创建对象。但实现机制不同,原型模式是先创建一个对象,采用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();
原标题:PHP设计模式 原型模式(Prototype)
关键词:PHP