热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php函数参数前有个类_PHP设计模式之门面模式(Facade)代码实例大全(16)

目的[1]门面模式的最初目的并不是为了避免让你阅读复杂的API文档,这只是一个附带作用。其实它的本意是为了降低耦合性并且遵循Demeter定律。Facade通过嵌入多
4e6b8b0650264c54911a53012eda7bd6.png

目的[1]

门面模式的最初目的并不是为了避免让你阅读复杂的 API 文档,这只是一个附带作用。其实它的本意是为了降低耦合性并且遵循 Demeter 定律。

Facade通过嵌入多个(当然,有时只有一个)接口来解耦访客与子系统,同时也为了降低复杂度。

  • Facade 不会禁止你访问子系统
  • 你可以(应该)为一个子系统提供多个 Facade

因此一个好的 Facade 里面不会有 new 。如果每个方法里都要构造多个对象,那么它就不是 Facade,而是生成器或者[抽象|静态|简单] 工厂 [方法]。

优秀的 Facade 不会有 new,并且构造函数参数是接口类型的。如果你需要创建一个新实例,则在参数中传入一个工厂对象。

UML

bf4efd110856b4f0f93048078f4950f8.png

★官方PHP高级学习交流社群「点击」管理整理了一些资料,BAT等一线大厂进阶知识体系备好(相关学习资料以及笔面试题)以及不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货

代码

  • Facade.php

{/*** @var OsInterface* 定义操作系统接口变量。*/private $os;/*** @var BiosInterface* 定义基础输入输出系统接口变量。*/private $bios;/*** @param BiosInterface $bios* @param OsInterface $os* 传入基础输入输出系统接口对象 $bios 。* 传入操作系统接口对象 $os 。*/public function __construct(BiosInterface $bios, OsInterface $os){$this->bios = $bios;$this->os = $os;}/*** 构建基础输入输出系统执行启动方法。*/public function turnOn(){$this->bios->execute();$this->bios->waitForKeyPress();$this->bios->launch($this->os);}/*** 构建系统关闭方法。*/public function turnOff(){$this->os->halt();$this->bios->powerDown();}
}

  • OsInterface.php

* 创建操作系统接口类 OsInterface 。
*/
interface OsInterface
{/*** 声明关机方法。*/public function halt();/** * 声明获取名称方法,返回字符串格式数据。*/public function getName(): string;
}

  • BiosInterface.php

* 创建基础输入输出系统接口类 BiosInterface 。
*/
interface BiosInterface
{/*** 声明执行方法。*/public function execute();/*** 声明等待密码输入方法*/public function waitForKeyPress();/*** 声明登录方法。*/public function launch(OsInterface $os);/*** 声明关机方法。*/public function powerDown();
}

测试

  • Tests/FacadeTest.php

use DesignPatternsStructuralFacadeOsInterface;
use PHPUnitFrameworkTestCase;/**
* 创建自动化测试单元 FacadeTest 。
*/
class FacadeTest extends TestCase
{public function testComputerOn(){/** @var OsInterface|PHPUnit_Framework_MockObject_MockObject $os */$os = $this->createMock('DesignPatternsStructuralFacadeOsInterface');$os->method('getName')->will($this->returnValue('Linux'));$bios = $this->getMockBuilder('DesignPatternsStructuralFacadeBiosInterface')->setMethods(['launch', 'execute', 'waitForKeyPress'])->disableAutoload()->getMock();$bios->expects($this->once())->method('launch')->with($os);$facade = new Facade($bios, $os);// 门面接口很简单。$facade->turnOn();// 但你也可以访问底层组件。$this->assertEquals('Linux', $os->getName());}
}

PHP 互联网架构师成长之路*「设计模式」终极指南

PHP 互联网架构师 50K 成长指南+行业问题解决总纲(持续更新)

面试10家公司,收获9个offer,2020年PHP 面试问题

★如果喜欢我的文章,想与更多资深开发者一起交流学习的话,获取更多大厂面试相关技术咨询和指导,欢迎加入我们的群啊,暗号:phpzh(君羊号码856460874)。

2020年最新PHP进阶教程,全系列!

6e020e526aec4f1292910c14ffd78911.gif

参考

  1. ^内容不错的话希望大家支持鼓励下点个赞/喜欢,欢迎一起来交流;另外如果有什么问题和想看的内容可以在评论提出



推荐阅读
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • ZABBIX 3.0 配置监控NGINX性能【OK】
    1.在agent端查看配置:nginx-V查看编辑时是否加入状态监控模块:--with-http_stub_status_module--with-http_gzip_stat ... [详细]
  • 构建LNMP架构平台
    LNMP架构的组成:Linux、Nginx、MySQL、PHP关于NginxNginx与apache的作用一样,都是为了搭建网站服务器,由俄罗斯人lgorsysoev开发,其特点是 ... [详细]
  • 第四单元和课程总结:简单的架构设计意识
    一、第四单元架构设计总结第一次作业由于需要按名查找类图模型,于是建立"Class"类进行管理由于方法具有参数导致类中存在二级结构 ... [详细]
  • InterfaceAsSchematic接口就是大纲接口在开发程序的“骨架”时非常有用。在设计组件时,使用接口进行设计和讨论都是对你的团队有益处的。比如定义一个BillingNot ... [详细]
  • 思考题|传统_一本教你如何编写高质量代码的图书:《设计模式之美》
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了一本教你如何编写高质量代码的图书:《设计模式之美》相关的知识,希望对你有一定的参考价值。软件工程师都很重视代码质量&#x ... [详细]
  • 什么时候使用接口?什么时候使用抽象?选择Java接口还是抽象类 (转)
    很到位的一个分析,先收藏了。。。在一个面向对象的系统中,系统的各种功能是由许许多多的不同对象协作完成的。在这种情况下,各个对象内部是如何实 ... [详细]
  • L05 Laravel 教程电商实战
    https:laravel-china.orgcourseslaravel-shophttps:laravel-china.orgtopics13206laravel-shop-c ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • 本文介绍了一个React Native新手在尝试将数据发布到服务器时遇到的问题,以及他的React Native代码和服务器端代码。他使用fetch方法将数据发送到服务器,但无法在服务器端读取/获取发布的数据。 ... [详细]
author-avatar
荣星树
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有