PHP设计模式之Prototype模式

    技术2022-05-20  61

    原型模式重要的特点是,一个基类提供一个拷贝自己对象的接口方法,然后简化了子类的创建。当一个类的实例只能有几个不同状态组合中的一种时。建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些,下面是Prototype模式典型的结构图:

    下面的代码来源于一个大牛的blog: http://www.phppan.com/?s=设计模式

    <?php /** * 原型模式 2010-06-27 sz * @author phppan.p#gmail.com http://www.phppan.com * 哥学社成员(http://www.blog-brother.com/) * @package design pattern */ /** * 抽象原型角色 */ interface Prototype { public function copy(); } /** * 具体原型角色 */ class ConcretePrototype implements Prototype{ 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() { /* 深拷贝实现 $serialize_obj = serialize($this); // 序列化 $clone_obj = unserialize($serialize_obj); // 反序列化 return $clone_obj; */ return clone $this; // 浅拷贝 } } /** * 测试深拷贝用的引用类 */ class Demo { public $array; } class Client { /** * Main program. */ public static function main() { $demo = new Demo(); $demo->array = array(1, 2); $object1 = new ConcretePrototype($demo); $object2 = $object1->copy(); var_dump($object1->getName()); echo '<br />'; var_dump($object2->getName()); echo '<br />'; $demo->array = array(3, 4); var_dump($object1->getName()); echo '<br />'; var_dump($object2->getName()); echo '<br />'; } } Client::main(); ?>


    最新回复(0)