IT码农库

您当前所在位置:首页 > 网络编程 > PHP编程

PHP编程

详解PHP设计模式之桥接模式

[db:来源] 程序员-南2022-12-20PHP编程6806
桥接,顾名思义,就是用来连接两个部分,使得两个部分可以互相通讯。桥接模式将系统的抽象部分与实现部分分离解耦,使他们可以独立的变化。本文通过示例具体介绍了桥接模式的原理与使用,需要的可以参考一下

简介

桥接模式又鸣桥梁模式,属于结构型模式。目的是将抽象与实现分离,使它们都可以独立的变化,解耦。继续有很多好处,但是会增加耦合,而桥接模式偏向组合和聚合的方式来共享。

适用场景

不希望或不适用使用多继续的场景。

一个类存在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();

到此这篇关于详解PHP设计模式之桥接模式的文章就介绍到这了,更多相关PHP桥接模式内容请搜索以前的文章或继承浏览下面的相关文章希望大家以后多多支持!

大图广告(830*140)