<?php
//原型设计模式创建对象的方式是复制和克隆初始对象或原型,这种方式比创建新实例更为有效。
class CD{
    public $band = '';
    public $title = '';
    public $trackList = [];

    public function __construct($id){
        $cds = [
            ['band' => 'fenghuangchuanqi', 'title' => 'zuixuanminzufeng'],
            ['band' => 'TFBOYS', 'title' => 'zuoshouyoushou'],
        ];
        if(empty($cds[$id])){
            $this->band = 'unknown';
            $this->title = 'unknown';
        }else{
            $this->band = $cds[$id]['band'];
            $this->title = $cds[$id]['title'];
        }
    }

    public function buy(){
        var_dump($this);
    }
}

class MixtapeCD extends CD{
    public function __clone(){
        $this->title = 'Mixtape';
    }
}

$externalPurchaseInfoBandID = 1;
$bandMixProto = new MixtapeCD($externalPurchaseInfoBandID);

$externalPurchaseInfo = [];
$externalPurchaseInfo[] = ['brrr', 'goodbye'];
$externalPurchaseInfo[] = ['what it means', 'brrr'];

foreach($externalPurchaseInfo as $mixed){
    $cd = clone $bandMixProto;
    $cd->trackList = $mixed;
    $cd->buy();
}

//处理创建成本较高和新实例的初始信息保持相对不变的对象时,最佳的做法是使用基于原型设计模式创建的复制类。