本文
介绍了PHP观察器
模式的应用:
< PHP
*观察者模式应用场景实例
*
*免责声明:本文是以哈萨克斯坦为例说明,哈萨克斯坦没有涉及任何票务业务代码,全部原创,任何相似纯属巧合。
*
*场景描述:
*哈萨克斯坦机票是票务的
核心业务(这种模式不限于业务),但购买机票有其他不同的逻辑,如:
* 1,在购买机票后记录
文本记录
* 2,在购票后记录数据库日志
* 3,在购票后发送短信息
* 4
* 5,其他
类型的活动,等等。
*
*传统
解决方案:
*在购票逻辑类中添加相关代码,以完成各种逻辑。
*
*存在的问题:
* 1。一旦业务逻辑发生变化,如在购票业务中添加其他业务逻辑,就必须
修改购票的核心
文件,甚至修改购票过程。
* 2,每月累计后,文件冗长,造成后续维修困难。
*
这个问题的主要
原因是
程序的紧密耦合。使用观察模式,当前的业务逻辑被
优化为松耦合
*也符合面向接口编程的思想。
*
*观察者模式的典型实现:
* 1,定义2个接口:观察者(通知)接口,观察者(主题)接口
* 2,定义2个类,观察对象实现观察者接口和主题类,由查看器的接口实现。
* 3,主题类别登记需要通知的观察员。
* 4,当主题类中出现业务逻辑时,将通知观察对象,每个观察者
执行自己的业务逻辑。
*
*示例:以下代码
*
* /
date_default_timezone_set('prc '); / /
设置中国时区
对# ===================观测器观察============接口定义
*
*观察者接口(通知接口)
*
* /
接口iticketobserver / /观察者接口
{
功能onbuyticketover($发件人,$ args); / /
方法通知
}
*
*主题
界面 *
* /
接口iticketobservable / /观察对象接口
{
功能addObserver($观察); / /
注册观测器方法
}
# ====================主题类经济
*
*主题班(购票)
*
* /
类hipiaobuy实现iticketobservable { / /接口(被观察者实现的主题)
私人=阵列($ _observers); / /圆阵(观察者)
公共功能buyticket($票) / /核心舱机票预订流程,
处理 {
票证逻辑
/ /循环通知,叫onbuyticketover实现不同的业务逻辑
foreach(美元-> _observers达OBS)
OBS -> onbuyticketover美元(美元,美元的票); / /美元可以用来获得学科类处理,用于通知
}
添加通知
公共职能addObserver($观测器)n / /添加一个通知
{
美元-> _observers { } = $观测器;
}
}
# =========================定义多个通知====================
短信/日志通知
类hipiaomsm实现iticketobserver {
公共功能onbuyticketover($发件人,$票){
回声(
日期('y-m-d H:我:S)。短信日志:机票成功:机票);
}
}
日志/文本通知
类hipiaotxt实现iticketobserver {
公共功能onbuyticketover($发件人,$票){
回声(日期('y-m-d H:我:S)。文本记录:购买机票:机票);
}
}
可抵扣数量通知
类hipiaodikou实现iticketobserver {
公共功能onbuyticketover($发件人,$票){
回声(日期('y-m-d H:我:S)。赠送卷轴:购票成功:赠送门票10元1元。;
}
}
# ============================
用户购买====================
买美元=新(hipiaobuy);
买美元-> addObserver(新)(hipiaomsm); / /根据不同的业务逻辑来加入通知
买美元-> addObserver(新hipiaotxt());
买美元-> addObserver(新hipiaodikou());
票
买美元-> buyticket(1行);
>
结果如下:
2017-02-03 10:25:45短信日志:票成功:1排
2017-02-03 10:25:45文本日志记录:购票成功:1排
2017-02-03 10:25:45礼物扣除卷:购票成功:一排10元给1。
更多有关PHP相关内容的感兴趣的读者可以查看主题:PHP面向对象编程
教程 希望本文能对PHP程序设计有所帮助。