PHP三种常见设计模式

PHP三种常见设计模式

一、单例模式(Singleton)

单例模式也叫单态模式,是设计模式中最为简单的一种模式.

单例模式是指整个应用中类只有一个对象实例的设计模式。它通常被用来创建对象,确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。

实际的应用场景:

1)数据库连接一般也是采用单例模式,因为数据库连接是一种数据库资源。主要是节省打开或者关闭数据库连接所引起的效率损耗,这种效率上的损耗还是非常昂贵的,用单例模式来维护,就可以大大降低这种损耗。

2)应用程序的日志应用,一般都用单例模式实现,这一般是由于共享的日志文件一直处于打开状态,因为只能有一个实例去操作,否则内容不好追加。

二、工厂模式(factory)

工厂模式的最大优点在于创建对象上面,就是把创建对象的过程封装起来,这样随时可以产生一个新的对象。减少代码进行复制粘帖,耦合关系重,牵一发动其他部分代码。

通俗的说,以前创建一个对象要使用new,现在把这个过程封装起来了。

实际的应用场景:

1)做支付接口的时候,可能对应不同的支付网关:支付宝、财付通、网银在线等。方便未来扩展,设计成工厂模式。

2)php连接不同的数据库:可能要连接mysql,也可能要连接sqlserver,还可能连接oracle等等其他的数据库。那么就需要做一个抽象的数据库类。

3)在为用户注册的时候,分为很多种角色的用户。比如册用户,匿名用户、管理员用户等。完全使用可以使用工厂的思想来实现,代码也容易维护,为每种角色可以生成操作的类。

 定义以下几个类:

UserFactory 用户工厂类,负责生成不同的用户类

User:用户类的基类,所有用户类都是继承这个类

不同角色的类:注册用户类、匿名用户类、管理员用户类

其实工厂模式有很多变体,抓住精髓才是关键:只要是可以根据不同的参数生成不同的类实例,那么就符合工厂模式的设计思想。

下图为简单工厂模式:

 

运行结果:
送玫瑰,送戒指!
穿婚纱!

下图为工厂模式:

运行结果:
送玫瑰,送戒指!
穿婚纱!

下图为抽象工厂:

 

运行结果:
美女,我送你玫瑰和戒指!
我偷偷喜欢你
我要穿婚纱!
我好害羞哦!!

 

区别:
简单工厂模式:用来生产同一等级结构中的任意产品。对与增加新的产品,无能为力

工厂模式 :用来生产同一等级结构中的固定产品。(支持增加任意产品)
抽象工厂 :用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)

以上三种工厂 方法在等级结构和产品族这两个方向上的支持程度不同。所以要根据情况考虑应该使用哪种方法

三、观察者模式(observer)

当一个对象状态发生改变时,依赖他的对象全部得到通知 

优点:低耦合、非侵入式

 该模式非常简单:一个对象通过添加一个方法(该方法允许另一个对象,即观察者注册自己)使本身变得可观察。当可观察的对象更改时,它会将消息发送到已注册的观察者。这些观察者使用该信息执行的操作与可观察的对象无关。结果是对象可以相互对话,而不必了解原因。

观察者设计模式非常常用,在一般复杂的WEB系统中,观察者模式可以帮你减轻代码设计的压力,降低代码耦合
实际应用场景:设计一个订单类
1)订单创建完成后,会做各种动作,比如发送EMAIL,或者改变订单状态等等。
2)原始的方法,是将这些操作都写在create函数里面
3)但是随着订单创建类的越来越庞大,这样的操作已经无法满足需求和快速变动
4)这个时候,观察者模式出现了

代码如下:

运行结果:
购买成功发送购买成功一个邮件改变订单状态

 再举一个例子:

 

注册/移除观察者 如下代码:

 

参考链接:https://segmentfault.com/a/1190000008803247

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章