美文网首页
PHP设计模式之原型模式(Prototype) 代码实例大全(六

PHP设计模式之原型模式(Prototype) 代码实例大全(六

作者: 八重樱勿忘 | 来源:发表于2020-09-02 14:00 被阅读0次

    目的

    相比正常创建一个对象 (new Foo () ),首先创建一个原型,然后克隆它会更节省开销。

    示例

    • 大数据量 (例如:通过 ORM 模型一次性往数据库插入 1,000,000 条数据) 。

    UML 图

    官方PHP高级学习交流社群「点击」管理整理了一些资料,BAT等一线大厂进阶知识体系备好(相关学习资料以及笔面试题)以及不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货

    代码

    • BookPrototype.php
    
    <?php
    
    namespace DesignPatterns\Creational\Prototype;
    
    abstract class BookPrototype
    {
        /**
        * @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;
        }
    }
    
    • BarBookPrototype.php
    
    <?php
    
    namespace DesignPatterns\Creational\Prototype;
    
    class BarBookPrototype extends BookPrototype
    {
        /**
        * @var string
        */
        protected $category = 'Bar';
    
        public function __clone()
        {
        }
    }
    
    • FooBookPrototype.php
    
    <?php
    
    namespace DesignPatterns\Creational\Prototype;
    
    class FooBookPrototype extends BookPrototype
    {
        /**
        * @var string
        */
        protected $category = 'Foo';
    
        public function __clone()
        {
        }
    }
    

    测试

    • Tests/PrototypeTest.php
    
    <?php
    
    namespace DesignPatterns\Creational\Prototype\Tests;
    
    use DesignPatterns\Creational\Prototype\BarBookPrototype;
    use DesignPatterns\Creational\Prototype\FooBookPrototype;
    use PHPUnit\Framework\TestCase;
    
    class PrototypeTest extends TestCase
    {
        public function testCanGetFooBook()
        {
            $fooPrototype = new FooBookPrototype();
            $barPrototype = new BarBookPrototype();
    
            for ($i = 0; $i < 10; $i++) {
                $book = clone $fooPrototype;
                $book->setTitle('Foo Book No ' . $i);
                $this->assertInstanceOf(FooBookPrototype::class, $book);
            }
    
            for ($i = 0; $i < 5; $i++) {
                $book = clone $barPrototype;
                $book->setTitle('Bar Book No ' . $i);
                $this->assertInstanceOf(BarBookPrototype::class, $book);
            }
        }
    }
    

    PHP 互联网架构师成长之路*「设计模式」终极指南

    PHP 互联网架构师 50K 成长指南+行业问题解决总纲(持续更新)

    面试10家公司,收获9个offer,2020年PHP 面试问题

    ★如果喜欢我的文章,想与更多资深开发者一起交流学习的话,获取更多大厂面试相关技术咨询和指导,欢迎加入我们的群-点击此处(群号码856460874)。

    内容不错的话希望大家支持鼓励下点个赞/喜欢,欢迎一起来交流;另外如果有什么问题 建议 想看的内容可以在评论提出

    相关文章

      网友评论

          本文标题:PHP设计模式之原型模式(Prototype) 代码实例大全(六

          本文链接:https://www.haomeiwen.com/subject/bpousktx.html