设计模式——原型模式

说明

将一个对象作为原型,对其进行复制、克隆,产生一个和原对象类似的新对象。

示例

下面看下原型模式的代码实现

// 定义了一个原型
abstract class Prototype{
public $v = 'clone'.PHP_EOL;
public function __construct(){
echo 'create'.PHP_EOL;
}
abstract public function __clone();
}

class ConcretePrototype1 extends Prototype{
public function __clone(){

}
public function init($param){
$this->v = $param;
}
}

class ConcretePrototype2 extends Prototype{
//当外部使用clone关键字进行对象克隆时,直接就会进入这个魔术方法中。
//在这个魔术方法里面我们可以对属性进行处理,特别是针对引用属性进行一些独特的处理。
public function __clone(){
$this->v = 'clone 2';
}
}



// 调用
$p = new ConcretePrototype1();
$p->init('hello');
$p1 = clone $p; // ConcretePrototype1的__construct不会被执行
echo $p->v.'=='.$p1->v; // output: create hello==hello


$p = new ConcretePrototype2();
$p2 = clone $p;
echo $p->v.'=='.$p2->v; // output: create clone ==clone 2

// 浅复制:将一个对象复制后,基本数据类型的变量都会重新创建,而引用类型,指向的还是原对象所指向的。
// 深复制:将一个对象复制后,不论是基本数据类型还有引用类型,都是重新创建的。简单来说,就是深复制进行了完全彻底的复制,而浅复制不彻底。

总结

特点:减少创建对象时的开销


文章作者: Crazy Boy
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Crazy Boy !
赏

留言

想法、疑问或勘误,都可以写在这里。留言会公开显示。

正在准备留言区…

 上一篇
设计模式——单例模式 设计模式——单例模式
说明 单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。 单例模式适用于经常被访问的对象,或是创建和销毁需要调用大量资源和时间的对象,使用单例模式可以避免频繁创建和销
2022-05-19
下一篇 
设计模式——命令模式 设计模式——命令模式
说明 示例 下面看下命令模式的代码实现 总结
2022-05-19