<?php/** * 原型模式(深拷贝+浅拷贝) */declare(strict_types=1);//开启强类型模式class CopyObj{ public $array;}//抽象原型类abstract class Prototype{ protected $attach; public function __construct(CopyObj $obj) { $this->attach = $obj; } public function set($name, $value) { $this->$name = $value; } public function get($name) { return $this->$name; } public function getAttach() { return $this->attach; } abstract public function clone();}class DeepCopy extends Prototype{ public function clone() { $obj = clone $this; return $obj; }}class ShallowCopy extends Prototype{ public function clone() { $serializeObj = serialize($this); $obj = unserialize($serializeObj); return $obj; }}
123
123
//----------深拷贝--------------$chairman = new CopyObj();$chairman->array = ['×××', '×××', '江泽明'];$deepCopyObj1 = new DeepCopy($chairman);$deepCopyObj2 = $deepCopyObj1->clone();echo "<pre>";var_dump($deepCopyObj1->getAttach());var_dump($deepCopyObj2->getAttach());//修改对象$chairman->array = ['×××', '×××'];var_dump($deepCopyObj1->getAttach());var_dump($deepCopyObj2->getAttach());
asdsad
//-------------浅拷贝-------------$start = new CopyObj();$start->array = ['刘德华', '张学友', '郭富城', '黎明'];$deepCopyObj3 = new ShallowCopy($start);$deepCopyObj4 = $deepCopyObj3->clone();var_dump($deepCopyObj3->getAttach());var_dump($deepCopyObj4->getAttach());//修改对象$start->array = ['周杰伦'];var_dump($deepCopyObj3->getAttach());var_dump($deepCopyObj4->getAttach());
PHP设计模式:原型模式
原文地址:http://blog.51cto.com/phpme/2047833