二十四设计模式之原型设计模式
前段时间写了有关工厂设计模式的文章,今天我们就再说一下同样是创建型设计模式的原型模式。
老样子,我们先说一下何为原型模式:
原型模式中使用了一种克隆的技术来复制实例化的对象,注意工厂模式是对类本身的一些改进写法,而原型模式主要集中在对实例的操作。这里我们就少不了用到的关键字clone了,有人会问为什么要用到原型模式,实例化时直接创建一个new实例不就得了,针对这样的人,我就想说:“不送”。开玩笑啦,如果我们要建立大量的实例化的对象时,我们直接new一个类是不是感觉到这样会使代码和数据的冗余?因此我们采用了原型模式来减少原有的题。(既然我们的目标是工程师,这点我们也是应该考虑到的问题。)
那我们什么时候用到原型设计模式呢?
就像上述说的,如果要建立多个实例对象,避免冗余,这时我们应该考虑一下原型设计模
式了,例如,我们有个people类,想建立好多人的资料输出问题,还有针对于公司员工的信息,我们可以采用原型模式来减少冗余。
首先我们先介绍一下clone关键字的用法(__clone()内置函数的用法)
<?php
class A{
//包含一些类的属性和方法
private $h;
public function A(){
//一些初始化信息
echo "wo shi bu shi hen shuai?";
$this->h = "huahua";
}
public function getH(){
echo "h is :".$this->h;
}
function __clone(){}
}
$a1 = new A();
$a2 = clone a1;
$a1->getH();
$a2->getH();
?>
想上述程序输出的结果为:
wo shi bu shi hen shuai?
h is : huahua
h is : huahua
不知道大家有没有发现用clone新建对象的时候没有调用原有类的构造函数,但其内部属性完全继承了原有对象的属性的值,这就是clone
正因为clone的出现可以明确的减少对构造函数的调用,如果针对大数据的处理(或者数据库中有大量数据要输出的时候),极大减少了代码和内存的冗余。
不知道你看到现在会不会一个疑惑:既然你的目的是减少调用的构造函数(和析构函数),那你为什么要用类呢?
这时候我只能回答:你瞅瞅OOP的好处你就知道为什么了,我们不能总停留在平常写的那种小程序的思想不能自拔,毕竟开发大程序讲究的是团队合作,你的代码用OO思想编程有助于维护和团队合作。谢谢。
以上内容简要阐述原型模式的思想,大家可以参考参考。
如果有什么问题请留言,共同进步