whcoding whcoding
首页
收藏
归档
关于
GitHub (opens new window)
首页
收藏
归档
关于
GitHub (opens new window)
  • 设计模式概述
  • 工厂方法模式
  • 简单工厂模式
  • 原型模式
    • 设计模式
    whcoding
    2022-10-10
    目录

    原型模式

    # 原型模式

    • 创建型模式
    • 作用: 原型模式的主要思想是基于现有的对象克隆一个新的对象出来
    • 原型模式适用于大对象的创建, 创建一个大对象需要很大的开销如果每次new就会消耗很大原型模式仅需内存拷贝即可 这样就免去了类创建时重复的初始化操作

    # 流程图

    ![image-20201026142612351](/Users/wenhao/Library/Application Support/typora-user-images/image-20201026142612351.png)

    # 示例代码

    抽象类代码: 这里主要是 __clone() 方法

    <?php
    
    namespace App\Prototype;
    
    
    abstract class BookPrototype
    {
        /**
         * @var string
         */
        protected $title;
    
        /**
         * @var string
         */
        protected $category;
    
        /**
         * @abstract
         * @return void
         */
        abstract public function __clone();
    
        /**
         * @return string
         */
        public function getTitle()
        {
            return $this->title;
        }
    
        /**
         * @param string $title
         */
        public function setTitle($title)
        {
            $this->title = $title;
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39

    # 实现类代码

    <?php
    
    namespace App\Prototype;
    
    class BarBookPrototype extends BookPrototype
    {
    
        protected $category = 'Bar';
    
        public function __clone()
        {
          
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    
    use App\Prototype\BarBookPrototype;
    
    require __DIR__.'/../../vendor/autoload.php';
    
    $barBook = new BarBookPrototype();
    $barBook->setTitle("测测");
    echo $barBook->getTitle();
    
    // 使用 clone
    $cloneBarBook = clone $barBook;
    echo "</br>";
    echo $cloneBarBook->getTitle();
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    上次更新: 2022/10/10, 22:05:05
    简单工厂模式

    ← 简单工厂模式

    Theme by Vdoing | Copyright © 2018-2022 | 京ICP备16038673
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式