首页IT科技浅谈php设计模式的桥接模式有哪些(浅谈PHP设计模式的桥接模式)

浅谈php设计模式的桥接模式有哪些(浅谈PHP设计模式的桥接模式)

时间2025-09-19 10:05:45分类IT科技浏览6258
导读:简介: 桥接模式又叫桥梁模式,属于结构型模式。目的是将抽象与实现分离,使它们都可以独立的变化,解耦。继承有很多好处,但是会增加耦合,而桥接模式偏向组合和聚合的方式来共享。...

简介

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

适用场景:

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

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

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
csrss.exe是什么进程 2个(s.exe – s是什么进程 有什么用)