浅谈PHP设计模式的门面模式
简介:
门面模式又称之为外观模式,属于结构型的设计模式。
用于为子系统中的一组接口提供一致的调用方案。门面模式定义了一个高层接口,引入门面角色之后,只需要直接与门面角色交互,降低了系统的耦合度。
适用场景:
- 最经典的Laravel的Facade,当使用一些库的时候,不需要了解底层系统如何实现,只需要知道如何使用门面调用即可。
- 为一些复杂的子系统提供一个简单对外开放的调用方案。
优点:
- 对客户端,屏蔽了子系统的实现逻辑,只留出可供使用的方法,让开发人员很方便的看出来子系统可供调用的功能。
- 实现了子系统与调用端的松耦合关系。
- 扩展性很强,子类系统不受限制。
缺点:
隔绝了子系统的具体实现代码,增加代码溯源的难度。
代码:
//注:这里的门面写法和Laravel中的不一样,Laravel的门面是基于门面模式提供了一套强大且优雅的模块子系统解决方案,而此处的门面只是一种实现门面思想的示例。
class Facade {
private $pc;
private $mobile;
public function __construct(Mobile $mobile, PC $pc) {
$this->mobile = $mobile;
$this->pc = $pc;
}
public function turnOn() {
$this->mobile->turnOn();
$this->pc->turnOn();
}
public function turnOff() {
$this->pc->turnOff();
$this->mobile->turnOff();
}
}
//子系统接口
interface PC {
public function turnOn();
public function turnOff();
}
//子系统接口
interface Mobile {
public function turnOn();
public function turnOff();
}
//子系统实现
class ASUS implements PC {
public function turnOn() {
echo '华硕电脑开机' . PHP_EOL;
}
public function turnOff() {
echo '华硕电脑关机' . PHP_EOL;
}
}
//子系统实现
class Vivo implements Mobile {
public function turnOn() {
echo 'Vivo手机开机' . PHP_EOL;
}
public function turnOff() {
echo 'Vivo手机关机' . PHP_EOL;
}
}
//调用端==========================================
$facade = new Facade(new Vivo(), new ASUS());
$facade->turnOn();
$facade->turnOff();
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析