码迷,mamicode.com
首页 > Web开发 > 详细

PHP设计模式:原型模式

时间:2017-12-06 13:02:55      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:php   设计模式   原型模式   

sdfasd


<?php
/**
 * 原型模式(深拷贝+浅拷贝)
 */
declare(strict_types=1);//开启强类型模式

class CopyObj
{
    public $array;
}

//抽象原型类
abstract class Prototype
{
    protected $attach;

    public function __construct(CopyObj $obj)
    {
        $this->attach = $obj;
    }

    public function set($name, $value)
    {
        $this->$name = $value;
    }

    public function get($name)
    {
        return $this->$name;
    }

    public function getAttach()
    {
        return $this->attach;
    }

    abstract public function clone();
}

class DeepCopy extends Prototype
{
    public function clone()
    {
        $obj = clone $this;
        return $obj;
    }
}

class ShallowCopy extends Prototype
{
    public function clone()
    {
        $serializeObj = serialize($this);
        $obj = unserialize($serializeObj);
        return $obj;
    }
}

123

123

//----------深拷贝--------------
$chairman = new CopyObj();
$chairman->array = ['×××', '×××', '江泽明'];


$deepCopyObj1 = new DeepCopy($chairman);
$deepCopyObj2 = $deepCopyObj1->clone();

echo "<pre>";

var_dump($deepCopyObj1->getAttach());
var_dump($deepCopyObj2->getAttach());

//修改对象
$chairman->array = ['×××', '×××'];
var_dump($deepCopyObj1->getAttach());
var_dump($deepCopyObj2->getAttach());

asdsad

//-------------浅拷贝-------------

$start = new CopyObj();
$start->array = ['刘德华', '张学友', '郭富城', '黎明'];
$deepCopyObj3 = new ShallowCopy($start);
$deepCopyObj4 = $deepCopyObj3->clone();
var_dump($deepCopyObj3->getAttach());
var_dump($deepCopyObj4->getAttach());

//修改对象
$start->array = ['周杰伦'];
var_dump($deepCopyObj3->getAttach());
var_dump($deepCopyObj4->getAttach());


PHP设计模式:原型模式

标签:php   设计模式   原型模式   

原文地址:http://blog.51cto.com/phpme/2047833

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!