博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
螃蟹学PHP设计模式之外观模式
阅读量:7091 次
发布时间:2019-06-28

本文共 2006 字,大约阅读时间需要 6 分钟。

hot3.png

6.外观模式

今天不小心上班又迟到了,螃蟹还是觉得比较愧疚。虽然现在感觉又木有什么事了,公司的项目进展实在有些慢,有机会还是想去大公司学习学习。废话不多说了,昨天搞了三个设计模式,数据访问对象模式,装饰器模式和委托模式。这里回顾一下委托模式,螃蟹之前的比喻就是中介,就是原对象后期可能增加很多功能,这些功能基本相似,那就避免在原对象创建过多的重复性代码,把功能拿出来定义成类,再通过委托类动态实现功能的处理。螃蟹感觉是有些难理解,不过逻辑还是清楚了。现在学习的外观模式感觉也不是很好理解,还是用比喻来说明。如果你有一部iphone手机,螃蟹都还没有,你会觉得外观很好看,但是你知道手机里面的构造肯定是异常复杂,为了不直接让你看到复杂的电路结构,所以用了酷酷的外壳展示给用户。外观模式就是这样,就是为了隐藏业务逻辑的复杂性而提供看似简单的接口给其他模块,比如搜索模块,只需要调用搜索的接口即可,而搜索接口对于传入参数的处理,数据库的操作以及返回结果的格式封装都隐藏了,这样就使得复杂的业务简单化了,虽然是表面的。

参考项目模块:日志系统

为什么螃蟹要用日志系统来说明呢,其实也没什么原因,就是觉得这个比较好用来展示这个模式。日志系统需要记录用户的操作,有需要转换为指定格式保存,还需要指定格式查询或导出。

日志类:Logs.class.php

id = $logs['id']; $this->uid = $logs['uid']; $this->type = $logs['type']; $this->created = $logs['created']; }}?>

主要用来创建日志对象,接下来创建日志功能类,传统的开发螃蟹一般都是直接在日志对象里面解决,学了外观模式后有了更好的解决方案。日志获取用户类:LogsGetUser.class.php

'螃蟹',2=>'小螃蟹',3=>'大螃蟹'); $logs->username = $user_array[$logs->uid]; }}?>

日志获取日期类:LogsGetDate.class.php

created = date('Y-m-d',$logs->created); } public static function getTime(Logs $logs){ $logs->created = date('Y-m-d H:i:s',$logs->created); }}?>

日志获取类型类:LogsGetType.class.php

'登录日志',2=>'搜索日志'); $logs->type = $logs_type_array[$logs->type]; }}?>

最后创建作为外观接口的日志服务类:LogsService.class.php

这么多功能类为这一个类服务,够气派哦。最后编写的测试类就很简单了,因为复杂的东西已经有人默默处理好了:TestFacade.php

1,'uid'=>2,'type'=>1,'created'=>1407210307));$logs2 = new Logs(array('id'=>2,'uid'=>1,'type'=>2,'created'=>1407211107));$logs3 = new Logs(array('id'=>3,'uid'=>3,'type'=>1,'created'=>1407201907));//输出结果print_r(LogsService::deal($logs1));echo '
';print_r(LogsService::deal($logs2,'time'));echo '
';print_r(LogsService::deal($logs3));?>

测试结果:

Logs Object ( [id] => 1 [uid] => 2 [type] => 登录日志 [created] => 2014-08-05 [username] => 小螃蟹 ) Logs Object ( [id] => 2 [uid] => 1 [type] => 搜索日志 [created] => 2014-08-05 05:58:27 [username] => 螃蟹 ) Logs Object ( [id] => 3 [uid] => 3 [type] => 登录日志 [created] => 2014-08-05 [username] => 大螃蟹 )

外观模式就到这了,之前螃蟹学过的建造者模式和适配器模式和这个都比较像,不过还是不同的,螃蟹已经领悟了,貌似也快到吃午饭的时候了,今天吃什么呢?

转载于:https://my.oschina.net/caroltc/blog/298081

你可能感兴趣的文章
OpenGL进阶(十) - obj文件的导入
查看>>
剑指XX游戏(八) - 腾讯2013校园招聘技术类笔试题详解
查看>>
docker 添加基础命令
查看>>
arm7上搭建boa并进行测试cgi+html
查看>>
iptables/netfiles基本使用
查看>>
angularJS拍照
查看>>
HTML5接入与OC交互
查看>>
错误整理:No plugin found for prefix 'jetty' in the....
查看>>
端口号简介
查看>>
JCreator中不能引入servlet包的解决办法
查看>>
mysql root账户被删除
查看>>
将CentOS设置为用光盘做yum源
查看>>
终于用上了比较完美的lion 10.7.3
查看>>
【CentOS 7笔记47】,rsync文件同步工具#171205
查看>>
word2007设置标题自动编号
查看>>
Ubuntu添加自定义快捷方式
查看>>
mysql 基本操作
查看>>
我的友情链接
查看>>
Xcode 使用Git User Interface State 问题
查看>>
我在群硕实习的日子
查看>>