目的
相比正常创建一个对象 (new Foo () ),首先创建一个原型,然后克隆它会更节省开销。
示例
- 大数据量 (例如:通过 ORM 模型一次性往数据库插入 1,000,000 条数据) 。
UML 图
![](https://img8.php1.cn/3cdc5/128ca/711/c97d3eb372931f27.png)
★官方PHP高级学习交流社群「点击」管理整理了一些资料,BAT等一线大厂进阶知识体系备好(相关学习资料以及笔面试题)以及不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货
代码
{/*** @var string*/protected $title;/*** @var string*/protected $category;abstract public function __clone();public function getTitle(): string{return $this->title;}public function setTitle($title){$this->title = $title;}
}
{/*** @var string*/protected $category = 'Bar';public function __clone(){}
}
{/*** @var string*/protected $category = 'Foo';public function __clone(){}
}
测试
use DesignPatterns\Creational\Prototype\FooBookPrototype;
use PHPUnit\Framework\TestCase;class PrototypeTest extends TestCase
{public function testCanGetFooBook(){$fooPrototype &#61; new FooBookPrototype();$barPrototype &#61; new BarBookPrototype();for ($i &#61; 0; $i <10; $i&#43;&#43;) {$book &#61; clone $fooPrototype;$book->setTitle(&#39;Foo Book No &#39; . $i);$this->assertInstanceOf(FooBookPrototype::class, $book);}for ($i &#61; 0; $i <5; $i&#43;&#43;) {$book &#61; clone $barPrototype;$book->setTitle(&#39;Bar Book No &#39; . $i);$this->assertInstanceOf(BarBookPrototype::class, $book);}}
}
PHP 互联网架构师成长之路*「设计模式」终极指南
PHP 互联网架构师 50K 成长指南&#43;行业问题解决总纲&#xff08;持续更新&#xff09;
面试10家公司&#xff0c;收获9个offer&#xff0c;2020年PHP 面试问题
★如果喜欢我的文章&#xff0c;想与更多资深开发者一起交流学习的话&#xff0c;获取更多大厂面试相关技术咨询和指导&#xff0c;欢迎加入我们的群-点击此处&#xff08;群号码856460874&#xff09;。
![](https://img8.php1.cn/3cdc5/128ca/711/ac54dd686184433f.gif)
内容不错的话希望大家支持鼓励下点个赞/喜欢&#xff0c;欢迎一起来交流&#xff1b;另外如果有什么问题 建议 想看的内容可以在评论提出