二十四设计模式之原型设计模式

来源:互联网 发布:淘宝宝贝系列属性出错 编辑:程序博客网 时间:2024/04/28 08:31

二十四设计模式之原型设计模式

前段时间写了有关工厂设计模式的文章,今天我们就再说一下同样是创建型设计模式的原型模式。

老样子,我们先说一下何为原型模式:

原型模式中使用了一种克隆的技术来复制实例化的对象,注意工厂模式是对类本身的一些改进写法,而原型模式主要集中在对实例的操作。这里我们就少不了用到的关键字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 : huahuah is : huahua
不知道大家有没有发现用clone新建对象的时候没有调用原有类的构造函数,但其内部属性完全继承了原有对象的属性的值,这就是clone

正因为clone的出现可以明确的减少对构造函数的调用,如果针对大数据的处理(或者数据库中有大量数据要输出的时候),极大减少了代码和内存的冗余。

不知道你看到现在会不会一个疑惑:既然你的目的是减少调用的构造函数(和析构函数),那你为什么要用类呢?

这时候我只能回答:你瞅瞅OOP的好处你就知道为什么了,我们不能总停留在平常写的那种小程序的思想不能自拔,毕竟开发大程序讲究的是团队合作,你的代码用OO思想编程有助于维护和团队合作。谢谢。

以上内容简要阐述原型模式的思想,大家可以参考参考。

如果有什么问题请留言,共同进步大笑


0 0