PHP中的设计模式介绍
这篇文章运用简单易懂的例子给大家介绍PHP中的设计模式介绍,代码非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
10年积累的网站建设、成都网站制作经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有朝阳免费网站建设让你可以放心的选择与我们合作。
单例模式
单例模式的含义:
作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统全局地提供这个实例。它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用。
单例模式的三个要素:
1. 保存类唯一实例的静态变量。
2. 构造函数和克隆函数必须是私有的,放在外部去实例化,这样就不存在单例模式的意义。
3. 提供一个可供外部访问的公共静态方法,这个方法返回该类的唯一实例。
单例模式的意义:
在 PHP 中的应用主要在于数据库应用, 所以一个应用中会存在大量的数据库操作, 在使用面向对象的方式开发时, 如果使用单例模式, 则可以避免大量的 new 操作消耗的资源。而不完全是对系统资源的节省, 可以避免重复实例化,因为 PHP 每次实例化一个类之后都会清理掉对应的资源,当再次使用的时候又会在重新去实例化一次。
单例模式使用的场景:
1. 数据库操作,减少对数据路的 new 操作,从而减少内存资源和系统资源的消耗。
2. 配置资源的共享,在一个系统中,配置资源都是全局的,使用单例模式也可以减少每次去读取配置带来的内存和系统资源的消耗。
代码演示:
单例模式和非单例模式的区别:
class Single { public function index() { return ''; } } $single1 = new Single(); $single2 = new Single(); var_dump($single1); var_dump($single2); if ($single2 === $single1) { echo "是同一个对象"; } else { echo "不是同一个对象"; } // object(Single)#1 (0) { // } // object(Single)#2 (0) { // } // 不是同一个对象 class Single2 { // 1.声明一个静态属性,用户保存类的实例 public static $instance; //3. 将构函数私有化,避免外部new(每new一次,就不是同一个实例) private function __construct() { } // 2.声明一个静态的公共方法,用户外部调用本类的实例 public static function getInstance() { if (!(self::$instance instanceof self)) { self::$instance = new self; } return self::$instance; } //3. 克隆函数私有化,避免外部clone(每clone一次,就不是同一个实例) private function __clone() { } } $singleDemo1 = Single2::getInstance(); $singleDemo2 = Single2::getInstance(); var_dump($singleDemo1->getInstance()); var_dump($singleDemo2->getInstance()); if ($singleDemo1 === $singleDemo2) { echo "是同一个对象"; } else { echo "不是同一个对象"; } // object(Single2)#3 (0) { // } // object(Single2)#3 (0) { // } // 是同一个对象工厂模式
工厂模式的有含义:
负责生成其他对象的方法。简单的描述就是通过一个工厂类,去实例化其他类或者方法。
工厂模式的意义:
通过使用工厂模式,减少因为多处 new 同一个类,当这个类发生变法时,则需要多处修改。
代码演示:
注册树模式
注册数的含义:
注册树就是将多个对象注册在一个对象池中,当我们需要使用时,直接从对象池获取即可。
注册数模式的优点:
单例模式解决的是如何在整个项目中创建唯一对象实例的问题,工厂模式解决的是如何不通过 new 建立实例对象的方法。
那么注册树模式想解决什么问题呢? 在考虑这个问题前,我们还是有必要考虑下前两种模式目前面临的局限。
首先,单例模式创建唯一对象的过程本身还有一种判断,即判断对象是否存在。存在则返回对象,不存在则创建对象并返回。
每次创建实例对象都要存在这么一层判断。
工厂模式更多考虑的是扩展维护的问题。
总的来说,单例模式和工厂模式可以产生更加合理的对象。怎么方便调用这些对象呢?
而且在项目内如此建立的对象好像散兵游勇一样,不便统筹管理安排啊。因 而,注册树模式应运而生。
不管你是通过单例模式还是工厂模式还是二者结合生成的对象,都统统给我 “插到” 注册树上。我用某个对象的时候,直接从注册树上取 一下就好。
这和我们使用全局变量一样的方便实用。 而且注册树模式还为其他模式提供了一种非常好的想法。
代码演示:
关于PHP中的设计模式介绍就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
分享文章:PHP中的设计模式介绍
文章出自:http://azwzsj.com/article/pjcjji.html