首页 » 网站建设 » php小店面技巧_PHP设计模式之门面模式

php小店面技巧_PHP设计模式之门面模式

访客 2024-11-24 0

扫一扫用手机浏览

文章目录 [+]

GoF类图

门面模式

php小店面技巧_PHP设计模式之门面模式

代码实现

php小店面技巧_PHP设计模式之门面模式
(图片来自网络侵删)

classSubSystemOne{publicfunctionMethodOne(){echo'子系统方法一',PHP_EOL;}}classSubSystemTwo{publicfunctionMethodTwo(){echo'子系统方法二',PHP_EOL;}}classSubSystemThree{publicfunctionMethodThree(){echo'子系统方法三',PHP_EOL;}}classSubSystemFour{publicfunctionMethodFour(){echo'子系统方法四',PHP_EOL;}}

定义四个或者N多个子系统,这个没什么好说的吧,可以想象是很多子系统,而且他们之间并不一定和这四个子系统一样的相似,有可能是千差万别的。

classFacade{private$subStytemOne;private$subStytemTwo;private$subStytemThree;private$subStytemFour;publicfunction__construct(){$this->subSystemOne=newSubSystemOne();$this->subSystemTwo=newSubSystemTwo();$this->subSystemThree=newSubSystemThree();$this->subSystemFour=newSubSystemFour();}publicfunctionMethodA(){$this->subSystemOne->MethodOne();$this->subSystemTwo->MethodTwo();}publicfunctionMethodB(){$this->subSystemOne->MethodOne();$this->subSystemTwo->MethodTwo();$this->subSystemThree->MethodThree();$this->subSystemFour->MethodFour();}}

通过门面类将这些子系统包装起来,对外供应的只是门面新定义的方法。

$facade=newFacade();$facade->MethodA();$facade->MethodB();

客户真个调用就非常大略了,我们不用知道详细调用了哪些子系统,只须要知道门面的这些方法干什么了就行啦!

门面模式便是这么的大略,而且只假如真实的在项目中做过开拓的朋友一定在不知不觉中就已经利用过这个模式了当你须要为一个繁芜子系统供应一个大略的接口时,门面模式就非常适用。
同时,如果客户程序与抽象类的实现部分之间存在着很大的依赖性时,也可以引入门面模式来进行解耦,提高子系统的独立性和可掩护性。
其余便是你须要构建一个层次构造的子系统时,门面可以充当每层子系统的入口点Laravel中的门面系统相信利用过框架的人一定都用过,比如:Cache::put()。
在Laravel中,门面的实现利用了一个魔术方法__callStatic()。
然后让工具的方法可以实现直策应用静态方法来进行调用。
是不是很神奇。
有兴趣的朋友可以翻翻源码,就在/Illuminate/Support/Facades/Facade.php中。
划重点:三层构造或者MVC也是门面模式的表示哦。
上面说了,门面模式适宜分层子系统的掩护。
而三层构造、MVC、MVP、MVVM这些货,实质上都是为了分层,而分层的目的,便是为了降落系统的繁芜性。

光卖我们的手机可弗成,向X米一样做高科技的家电企业才是我们终极的目标。
不过那么多的家电产品我们可生产不过来,于是,我们决定做一个商城(Facade)让一些质量非常好的商家加入我们的阵营,将他们的产品(SubSystem)放到商城中一起卖。
当然,这些商品可是经由我们慎重挑选的,绝对都是优品中的优品哦!

完全代码:https://github.com/zhangyue0503/designpatterns-php/blob/master/19.facade/source/facade.php

实例

这回我们将短信的发送以发送的维度进行包装,将不同的短信和推送运营商的接口包装起来,在发送的时候只须要通过发送类就可以掌握用不同的第三方做事进行短信或推送的发送啦,想想都很方便呢!

短信发送类图

短信发送功能门面模式版

完全源码:https://github.com/zhangyue0503/designpatterns-php/blob/master/19.facade/source/facade-push.php

<?phpclassSend{private$aliYunService;private$jiGuangService;private$message;private$push;publicfunction__construct(){$this->aliYunService=newAliYunService();$this->jiGuangService=newJiGuangService();$this->message=newMessageInfo();$this->push=newPushInfo();}publicfunctionPushAndSendAliYun(){$this->message->Send($this->aliYunService);$this->push->Push($this->aliYunService);}publicfunctionPushAndSendJiGuang(){$this->message->Send($this->jiGuangService);$this->push->Push($this->jiGuangService);}}classMessageInfo{publicfunctionSend($service){$service->Send();}}classPushInfo{publicfunctionPush($service){$service->Push();}}classAliYunService{publicfunctionSend(){echo'发送阿里云短信!
',PHP_EOL;}publicfunctionPush(){echo'推送阿里云关照!
',PHP_EOL;}}classJiGuangService{publicfunctionSend(){echo'发送极光短信!
',PHP_EOL;}publicfunctionPush(){echo'推送极光关照!
',PHP_EOL;}}$send=newSend();$send->PushAndSendAliYun();$send->PushAndSendJiGuang();

解释

依然还是熟习的配方熟习的味道。
在这里,可以想象我们的第三方做事类都是较老的接口,或者已经是很繁芜的接口了。
这时,利用外不雅观模式一来是可以与新系统合营,二来也能降落繁芜度但是要把稳的,外不雅观类本身可能成为繁芜度的来源,不过幸好我们可以屈服单一职责的原则,一个外不雅观类就做一件事就好啦下期看点

外不雅观模式实在并没有太多可说的,由于它确实非常大略而且无处不在。
不要被Laravel花哨的Facade类所欺骗,它并没有那么的繁芜。
下回我们学习到的依然是一个非常大略而且在不知不觉中就会用到的模式:模板方法模式

相关文章

PHP实现文字转图片的代码与应用

图片处理技术在各个领域得到了广泛应用。在PHP编程中,文字转图片功能同样具有很高的实用价值。本文将针对PHP实现文字转图片的代码进...

网站建设 2025-03-02 阅读1 评论0

NAN0017探索新型纳米材料的奥秘与应用

纳米技术作为一门新兴的交叉学科,近年来在材料科学、生物医学、电子工程等领域取得了举世瞩目的成果。其中,NAN0017作为一种新型纳...

网站建设 2025-03-02 阅读1 评论0

L26368XO代码其背后的创新与突破

编程语言在各个领域发挥着越来越重要的作用。在众多编程语言中,L26368XO代码以其独特的优势,成为了业界关注的焦点。本文将深入剖...

网站建设 2025-03-02 阅读1 评论0

HTML字体背景打造个化网页设计的关键元素

网页设计已经成为现代网络传播的重要手段。在众多网页设计元素中,字体和背景的搭配尤为关键。本文将从HTML字体背景设置的角度,探讨其...

网站建设 2025-03-02 阅读1 评论0