原型模式 Prototype
Posted 罗夏
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原型模式 Prototype相关的知识,希望对你有一定的参考价值。
用原型实例指定创建对象的种类,并且拷贝这些原型创建新的对象.
应用场景:
A.用new创建对象通常有较为复杂的数据准备或权限准备
B.对象较大,拷贝对象可以节省内存
UML图:
class WorkExperience { private $workTime; private $workAddress; public function __construct($workTime, $workAddress) { $this->workTime = $workTime; $this->workAddress = $workAddress; } /** * @return mixed */ public function getWorkTime() { return $this->workTime; } /** * @return mixed */ public function getWorkAddress() { return $this->workAddress; } /** * @param mixed $workTime */ public function setWorkTime($workTime) { $this->workTime = $workTime; } /** * @param mixed $workAddress */ public function setWorkAddress($workAddress) { $this->workAddress = $workAddress; } } abstract class Prototype { protected $age; protected $name; protected $workExperience; public function __clone() { $this->workExperience = clone $this->workExperience; //将对象深拷贝 } } class Resume extends Prototype { public function __construct($name) { $this->name = $name; } /** * @return mixed */ public function getAge() { return $this->age; } /** * @param mixed $age */ public function setAge($age) { $this->age = $age; } /** * @return mixed */ public function getName() { return $this->name; } /** * @param mixed $name */ public function setName($name) { $this->name = $name; } /** * @return mixed */ public function getWorkExperience() { return $this->workExperience; } /** * @param mixed $workExperience */ public function setWorkExperience(WorkExperience $workExperience) { $this->workExperience = $workExperience; } } $workExp = new WorkExperience(\'2013-2015\', \' A commpany\'); $resumeA = new Resume("jack"); $resumeA->setAge(23); $resumeA->setWorkExperience($workExp); $resumeB = clone $resumeA; $workExp->setWorkTime(\'2016-2017\'); $resumeA->setWorkExperience($workExp); echo $resumeA->getName() . php_EOL; echo $resumeA->getAge() . PHP_EOL; echo $resumeA->getWorkExperience()->getWorkTime() ; echo $resumeA->getWorkExperience()->getWorkAddress() . PHP_EOL; echo $resumeB->getWorkExperience()->getWorkTime() ; echo $resumeB->getWorkExperience()->getWorkAddress() . PHP_EOL;
以上是关于原型模式 Prototype的主要内容,如果未能解决你的问题,请参考以下文章