详解PHP设计模式之桥接模式
发布:smiling 来源: PHP粉丝网 添加日期:2023-06-23 12:01:15 浏览: 评论:0
桥接模式又叫桥梁模式,属于结构型模式。目的是将抽象与实现分离,使它们都可以独立的变化,解耦。继承有很多好处,但是会增加耦合,而桥接模式偏向组合和聚合的方式来共享。
适用场景
不希望或不适用使用多继承的场景。
一个类存在2个或更多的 独立变化维度 , 并且这些维度都需要 独立扩展
优点
解耦抽象和具体实现,方便增加抽象和实现。优秀的扩充能力
符合开闭原则和合成复用原则。
缺点
增加了系统的理解与设计难度。
需要正确地识别出系统中,两个独立变化的维度。
扩展
为什么要用桥接模式?
先说说继承:
如果有一个手机类作为父类A,下面有各个牌子的手机作为子类B,又有每个牌子手机旗下的内置应用类C。此时如果有3个手机的牌子,那么内置应用的父类可能有30个。
如果因为需求变需要增加手机品牌B,或者接着有第四层的D类继承第三层的内置应用类,想想这个是多么庞大的数量。后期难以维护。如果一旦父级发生变动,株连很多子类。
其实按照合成复用原则,也就是少用继承(强耦合),多用组合(弱耦合)或者聚合(中耦合)
以上的问题,可以直接拆分成两个大模块:
手机类作为抽象,手机牌子作为具体的类。
内置软件可单独抽象,每一个内置的软件作为具体的类。
然后让让两个抽象进行牵线搭桥,这边是桥接模式的思路。
案例代码
- abstract class Mobile {
- abstract public function operate();
- }
- class HuaWei extends Mobile {
- public function operate() {
- echo '华为手机';
- }
- }
- class Vivo extends Mobile {
- public function operate() {
- echo 'Vivo手机';
- }
- }
- Abstract class Abstraction {
- protected $implementer;
- public function setImplementer ($implementer) {
- $this->implementer = $implementer;
- }
- public function run() {
- $this->implementer->operate();
- }
- }
- class HuaWeiApp extends Abstraction {
- public function run() {
- $this->implementer->operate();
- }
- }
- class VivoApp extends Abstraction {
- public function run() {
- $this->implementer->operate();
- }
- }
- //调用端
- $ab = new HuaWeiApp();
- $ab->setImplementer(new HuaWei);
- $ab->run();
- $ab = new VivoApp();
- $ab->setImplementer(new Vivo);
- $ab->run();
抽象代码
- //创建一个实现
- abstract class Implementer {
- abstract public function operate();
- }
- class ImplementerA extends Implementer {
- public function operate() {
- echo 'ImplementerA';
- }
- }
- class ImplementerB extends Implementer {
- public function operate() {
- echo 'ImplementerB';
- }
- }
- Abstract class Abstraction {
- protected $implementer;
- //用组合的方式替代继承
- public function setImplementer (Implementer $implementer) {
- $this->implementer = $implementer;
- }
- public function run() {
- $this->implementer->operate();
- }
- }
- class RefinedAbstraction extends Abstraction {
- public function run() {
- $this->implementer->operate();
- }
- }
- //调用端============================================================
- $ab = new RefinedAbstraction();
- $ab->setImplementer(new ImplementerA());
- $ab->run();
- $ab->setImplementer(new ImplementerB());
- $ab->run();
Tags: PHP设计模式 PHP桥接模式
- 上一篇:谈一谈php面向对象的理解
- 下一篇:最后一页
相关文章
- ·php设计模式是什么,该如何理解(2014-06-10)
- ·php设计模式 建造者模式 与Adapter(适配器模式)(2014-08-02)
- ·PHP设计模式之建造者模式定义与用法简单示例(2018-10-13)
- ·PHP设计模式之委托模式定义与用法简单示例(2018-10-13)
- ·PHP设计模式概述(2020-02-15)
- ·php设计模式之单例模式使用示例(2020-08-29)
- ·php设计模式之命令模式使用示例(2020-10-06)
- ·php基础设计模式大全(注册树模式、工厂模式、单列模式)(2021-06-16)
- ·PHP设计模式之简单投诉页面实例(2021-07-11)
- ·实例讲解PHP设计模式编程中的简单工厂模式(2021-07-12)
- ·PHP设计模式之工厂模式详解(2021-08-16)
- ·PHP设计模式之模板方法模式实例浅析(2021-11-02)
- ·PHP设计模式入门之迭代器模式原理与实现方法分析(2022-03-02)
- ·PHP设计模式入门之状态模式原理与实现方法分析(2022-03-02)
- ·深入分析PHP设计模式(2022-03-14)
- ·PHP设计模式之原型模式示例详解(2022-04-10)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)