- 博客(23)
- 收藏
- 关注
原创 扒一扒 laravel的消息通知(上)
laravel给我们提供了多渠道的消息通知功能,包括邮件,短信,数据库,slack等通知方式。本文主要分析基于数据库的消息通知的底层实现。
2016-11-01 10:14:29 7518 1
原创 结合laravel Facade看外观模式怎么用?
在laravel中,我们经常通过facade来实现全局调用某个方法而不需要实例化一个对象,今天就来扒一扒它是怎样做到的。所有的Facade都是继承自同一个抽象父类Illuminate\Support\Facades\Facade。当我们调用Auth::guard(‘customer’)来返回一个guard实例的时候,只需要在调用这个方法的所在脚本写上use Illuminate\Support\Fa
2016-10-02 21:00:30 3136
原创 利用composer添加自定义类文件
1.配置composer.json文件 "autoload": { "classmap": [ "database", "app/libraries/" ], "psr-4": { "App\\": "app/" } },在”classmap”对应的数组中添
2016-09-28 01:14:19 2875
原创 装饰器模式——爱江山更爱美人
现在我们来继续讲一下装饰器模式。装饰器模式 装饰模式是通过组合加委托的方式帮助我们改变具体组件的功能的一种模式。为了刺激一下广大男同胞的荷尔蒙,今天我们通过美女来学习装饰器模式,手把手教学美女养成。巧妇难为无米之炊,首先我们先定义一个human类:class human{ }human对象便是我们进行改造的对象。 接下来定义一个美女处理抽象基类:abstract class beautyDev
2016-09-10 12:13:22 835
原创 解释器模式——我最懂你
解释器的概念其实很好理解,假如你女朋友问你你在干嘛呀,这个时候她往往是想你了。奇怪,我们获取到的信息明明是“你在干嘛呀”,但是经过“解释器“处理之后,就变成了“我想你了”。这下子好理解了吧,基于这个特点,解释器模式可以构造一个可以用于创建脚本化应用的迷你语言解释器。那么解释器模式到底有什么用呢?假设现在我们做的是一个问卷调查平台,命题人可以通过我们的平台来设计问卷以及问卷答案。为了检测用户输入的数据
2016-09-10 11:23:43 537
原创 访问者模式——操作与数据结构分离
什么是访问者模式 在《设计模式》中是这么定义的:访问者模式表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。可以看出,相比通过调用对象方法来对对象进行操作,访问者模式将操作和对象进行解耦,使得操作与对象相互独立,可以很容易得实现操作的修改和增减。下面通过公园收费规则的场景来进行演示访问者模式。 假设进入公园游玩的费用受到游客类型(老人,小孩
2016-09-09 17:36:35 516
原创 简单工厂模式 单例工厂模式 工厂方法模式 抽象工厂模式 原型模式
首先,我们需要了解一下什么是工厂模式,工厂模式就是用来产生对象的类或方法,包括简单工厂模式,单例工厂,工厂方法模式,抽象工厂方法和原型工厂1.简单工厂模式 简单工厂模式一般都是通过静态方法去产生对象的,可以产生任意对象。 示例代码如下: class simpleFactory{ public static function getInstance($classname){
2016-09-09 14:59:29 726
原创 享元模式——滴滴打车的共享经济思维
“共享经济”想必大家都不陌生,出行服务的滴滴,租房服务的Aribnb,甚至还有共享厕所的滴滴拉屎,在我们提供便利的同时也降低了资源的消耗,提高了资源的利用率。在设计模式中,享元模式也体现着这个新的互联网思想——共享,同样的,利用享元模式也可以达到降低计算机资源的损耗的目的。下面我们以滴滴为例子来演示享元模式的用法。在共享经济口号尚未出现在中国互联网之前,我们出门打计程车都是一人一车的,我们知道一辆普
2016-09-09 14:36:47 3818
原创 中介模式——婚姻介绍之非诚勿扰~
在前面已经讲过的设计模式中,不少模式都是通过分割出多个对象来提高代码的复用性的,比如职责链模式和桥接模式,但是随着对象的增加,对象与对象之间的联系又和使系统呈现紧耦合,不易改动。有没有一种方法来解决这个问题呢? 答案是中介模式,中介模式通过建立一个中介者,把对象与对象之间的直接联系转化为对象联系中介,中介再联系另一个对象的方式,使原先对象与对象之间复杂的连接关系简化为一个以中介者为核心的拓扑结构。
2016-09-08 22:29:07 1403
原创 职责链模式——大公司病
在体制内,我们办理什么业务或者提出什么方案,大多数情况下都需要走一定的审批流程,大到以一家公司的方案审批流程,小到在想向学校提出请假请求,这中间我们的请求都有可能被流程中那个的某一环节得到处理。由于笔者对向学校请假的千辛万苦记忆深刻,现在就以向学校请假为例子来演示一下职责链的使用。假设现在请假一天内只需要向任课老师请假,请假1~3天的向学院辅导员请假,请假大于三天的要向学院领导请假。在这个模型中,我
2016-09-08 15:21:04 608
原创 命令模式——智能家居来了
俗话说说出去的话就像撒出去的水,再也收不回,可以我们总有希望收回的时候。当发现下达错误的命令操作后,能否撤销操作操作呢?答案是可以,下面我们借助命令模式来完成这个功能。在这里我们来构建一个智能家居系统,消费者可以发送指令给智能管家,然后智能管家根据命令调用家里的各种电器完成指定操作,从而调节我们的家居环境。总体来说,命令模式总也包含三大部分,命令(消费者指令),管理者(智能管家),命令实际执行者(电
2016-09-08 12:16:49 840
原创 桥接模式——多层分支也不怕
在编程中,我们会经常遇见多层级分支的情况,显然用继承是不合适的,子类和父类的耦合过高会给后期代码的维护带来极大的麻烦,为了解决这个问题,我们可以使用桥接模式。简单来说,桥接模式就是将每个分支单独分开,然后通过委托调用的方式实现桥接。下面通过一个例子来演示桥接模式的用法。在不同的系统中,系统服务的运行是不一样的,而不同的软件又依赖不同的服务。假设现在我们有ios和android两个系统,有wlan和m
2016-09-08 00:35:57 526
原创 备忘录模式——论微信撤回
玩过大型单机游戏的都知道,通常我们在打大boss的时候会先保存,万一失败了就可以重新读取进度返回打boss前的状态,这种模式和数据库中的事务回滚也挺类似的,当sql语句执行失败时也会回滚到执行语句前的状态。既然能回滚到之前的状态,证明我们肯定是有对之前的状态进行存储,其实这就相当于写了备忘录,忘了的时候只需要看一下备忘录,又可以提取出信息。基于这个,我们今天来用备忘录模式来模仿一下微信撤回。 首
2016-09-07 16:01:28 653 1
原创 PHP反射API实现自动加载
PHP具有完整的反射 API,添加了对类、接口、函数、方法和扩展进行反向工程的能力。 在这里我们通过一个简单的应用来展示一下反射API的魅力。 让我们来看看如何利用反射api实现自动加载模块 首先定义一个modules接口,不同模块实现不同的execute()功能。interface modules{ function execute();}接下来定义我们在这个例子中要用到的模块(要求
2016-09-07 14:20:54 1402 4
原创 适配器模式——拥抱合伙人
适配往往发生在两个已经存在的东西需要对接但是不兼容的情况下,相似的,适配器模式就是为了解决已有类和新类接口不统一的情况。 假设我们原先一个接口如下://定义一个产品在线接口interface onLine{//接口中包含一个联网方法 function onLineMethod();}//产品class product implements onLine{ function on
2016-09-06 22:00:51 321
原创 状态模式——你若安好,便是晴天
在现实中,对象的表现往往不是固定的,而是随时间或者环境而变化的,大到人随时间而变老,小到心情随着天气而喜怒哀乐。这时候,对象的状态随着某些因素而发生改变,行为也跟着随之改变,如同雨夜(因素)容易使人伤感(状态)而买醉(行为)。当一个对象的行为取决于其状态,并且它必须在运行时根据时间状态改变其行为时,我们就能使用状态模式来实现,从而消除大量的switch分支判断。首先,定义这个行为取决于状态的对象,这
2016-09-06 21:18:54 825
原创 外观模式——透过现象看本质
外观模式用于为复杂系统创建一个简单清晰的接口。当我们需要使用到子系统的代码时,为了避免过去深入地调用子系统代码而导致后期代码难以维护,减低代码和子系统的耦合性,我们需要在代码和子系统中引入一个入口。实际上就是在子系统代码进行一次封装,那么我们在调用子系统代码的时候就可以通过调用封装的方法来调用,以致于后期修改子系统代码时不会对我们的代码有很大的影响。下面通过一个例子来简单演示一下外观模式。 假设我
2016-09-06 20:46:43 630
原创 策略模式——教你如何追女生
何为策略? 策略,就是计策,谋略,是根据具体状况而采取的措施,在设计模式中,就是封装起来的算法实现。在程序设计过程,针对不同阶段的需求,我们往往需要去增加或者减少策略或调整策略,接下来就来介绍策略模式是如何提高代码灵活性的。策略模式教你追女生 老样子,还是举个栗子来说明。假设小明是一所工科大学学生,很想有女朋友,于是想到隔壁美女如云的高校追女生,我们也知道追女生的话不同的女生追法是不一样的,
2016-09-06 20:42:37 729
原创 模板方法模式——以不变应万变
模板方法模式 定义一个操作中算法的骨架,而将一些步骤延迟到子类中,从而实现通过不同子类来对具体实现操作实现重定义。假设现在有一份调查问卷,分给甲乙两个同学来做。先看看我们的问卷类abstract class questionnaire{ public function question1(){ echo "你的性别是".$this->answer1()."<
2016-09-06 20:36:41 443
原创 观察者模式——订制你的今日头条
信息爆炸的今天,根据自己的爱好去订阅相关的信息是很有必要的。 今天我们就来演示如何用观察者模式来实现订阅消息的更新推送。 首先我们定义一个主题(抽象通知者)抽象类:abstract class theme{ protected $themeName; protected $subscriber=array(); function addSubscriber(subs
2016-09-06 16:58:41 403
原创 建造者模式——标准化生产
假设我们现在需要生产一批机器人(机器人由头部,躯干,上肢,下肢组 成)。如果我们只是简单地定义一个robot类,如下:class robot{ public function createHead(){ echo "铝合金头部"; }; public function createBody(){ echo "铝合金躯干"; };
2016-09-06 14:51:17 413
原创 设计模式 组合模式
组合模式 什么是组合模式?组合模式是将一组对象组合为可像单个对象一样被使用的结构。同样地,举个栗子来说明。假设现在某国突然想教训一下不断念想某鱼岛的某本,于是开始招贤纳士,招兵买马。打战吧,肯定要有士兵,士兵肯定有攻击力,而且不同兵种攻击力肯定不同。假设现在我们有一个soldier抽象类,类的定义如下:有两个兵种,一个是步兵infantryman,一个是炮兵
2016-08-27 21:06:45 664
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人