PHP观察器模式应用场景详细解决方案

PHP观察器模式应用场景详细解决方案
本文介绍了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程序设计有所帮助。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部