当前位置:首页>php>[PHP] 设计模式 九 桥接模式

[PHP] 设计模式 九 桥接模式

  • 2026-10-11 08:16:07
[PHP] 设计模式 九 桥接模式

PHP 设计模式 九

桥接模式

桥接模式是结构型设计模式,核心思想是:将抽象与实现分离,使它们可以独立变化,通过「桥接」组合关系,替代传统的继承关系,解决多维度变化导致的类爆炸问题。

实现化接口 A实现化类 B抽象化抽象类 C抽象化类 D
$obj = D(B);$obj->function();

应用场景

序号
业务场景
抽象维度(上层)
实现维度(下层)
适用原因 & 价值
1
消息推送系统
消息类型:普通消息、紧急消息、订单通知、营销短信
发送渠道:短信、邮件、钉钉、微信公众号、APP 推送
可自由组合;新增消息类型 / 渠道互不影响,避免普通短信、紧急邮件等大量子类
2
电商支付系统
支付场景:APP 支付、H5 支付、小程序支付、PC 收银台
支付渠道:微信、支付宝、银联、抖音支付
解耦场景与支付通道,新增通道只加一个类,不用重复写各场景适配代码
3
日志处理系统
日志级别 / 类型:Debug、Info、Warn、Error、业务日志
日志存储方式:本地文件、MySQL、Redis、阿里云日志、ES
自由搭配:Error 存数据库、Info 存文件;扩展存储驱动不改动日志业务
4
图形绘图系统
形状:圆形、方形、三角形、矩形
样式 / 颜色:红色、蓝色、渐变、虚线、实线
分离形状与样式,任意组合,新增形状或样式互不侵入
5
物联网智能设备
智能设备:电视、空调、台灯、窗帘
控制方式:红外遥控、蓝牙、WiFi、语音控制
任一控制方式可操控任一设备,新增设备不用适配所有遥控器
6
文件导出系统
导出业务:订单导出、用户导出、报表导出
导出格式:Excel、CSV、PDF、Word
业务与格式解耦,新增格式只需实现驱动,不用改每个业务导出逻辑
7
后台权限系统
用户角色:管理员、运营、会员、游客
访问终端:PC 后台、APP、小程序、第三方 API
角色与终端权限逻辑分离,新增终端只需适配权限桥接层
8
短信模板系统
模板类型:验证码、通知、营销、告警
服务商:阿里云短信、腾讯云短信、华为云短信
模板业务和短信厂商解耦,切换 / 新增厂商无需修改模板逻辑

代码是实现

以后台权限为例,包括用户权限菜单和权限角色。

实现化接口:用户权限菜单接口

interfaceTerminalInterface{// 获取当前终端可访问的菜单publicfunctiongetMenu(): array;}

实现化类

//PC端classPcTerminalimplementsTerminalInterface{publicfunctiongetMenu(): array{return ['首页', '用户管理', '订单管理', '系统设置', '数据统计'];    }}//APP端classAppTerminalimplementsTerminalInterface{publicfunctiongetMenu(): array{return ['首页', '用户管理', '订单管理'];    }}

抽象化抽象类:角色象类

abstractclassAbstractRole{// 持有终端引用 == 桥接的桥protected TerminalInterface $terminal;publicfunction__construct(TerminalInterface $terminal){$this->terminal = $terminal;    }// 抽象方法:获取当前角色在对应终端的权限abstractpublicfunctiongetAuthMenu($roleid): array;}

抽象化类

//PC管理员classPCAdminRoleextendsAbstractRole{publicfunctiongetAuthMenu($roleid): array{return$this->terminal->getMenu($roleid);    }}//PC用户classPCUserRoleextendsAbstractRole{publicfunctiongetAuthMenu($roleid): array{return$this->terminal->getMenu($roleid);    }}//app用户:普通会员classAppCommonMemberRoleextendsAbstractRole{publicfunctiongetAuthMenu($roleid): array{return$this->terminal->getMenu($roleid);    }}

调用

$userinfo = [];$roleid =$userinfo['roleid'];$ter = new PcTerminal();$role = new PCAdminRole($ter);$menu = $role->getAuthMenu($roleid);

扫描识别二维码关注我们获取更多

最新文章

随机文章