喜迎
春节

设计模式——原型模式


说明

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

示例

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

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
40
41
42
// 定义了一个原型
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 !
评 论
 上一篇
设计模式——代理模式
设计模式——代理模式
说明其实每个模式名称就表明了该模式的作用,代理模式就是多一个代理类出来,替原对象进行一些操作,比如我们在租房子的时候回去找中介,为什么呢?因为你对该地区房屋的信息掌握的不够全面,希望找一个更熟悉的人去帮你做,此处的代理就是这个意思。再如我们
2022-05-19
下一篇 
设计模式——命令模式
设计模式——命令模式
说明示例下面看下命令模式的代码实现 1234567891011121314151617181920212223242526272829303132333435363738394041// 创建接口Commandinterface Comma
2022-05-19
  目录
hexo