首页 > 编程语言 >浅谈PHP设计模式的桥接模式

浅谈PHP设计模式的桥接模式

时间:2022-11-07 01:11:08浏览次数:40  
标签:function ab 浅谈 桥接 implementer class 设计模式 public operate

简介:

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

适用场景:

不希望或不适用使用多继承的场景。
一个类存在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();

标签:function,ab,浅谈,桥接,implementer,class,设计模式,public,operate
From: https://www.cnblogs.com/phpphp/p/16864740.html

相关文章

  • 23种设计模式-抽象工厂模式介绍加实战代码
    1、描述通俗一点来讲,抽象工厂模式就是在工厂方法模式的抽象工厂类中规范多个同类产品。工厂方法模式是针对一个产品系列的,而抽象工厂模式是针对多个产品系列的,即工厂方法......
  • 设计模式---代理模式
    简述对客户端隐藏目标类,创建代理类拓展目标类,并且对于客户端隐藏功能拓展的细节,使得客户端可以像使用目标类一样使用代理类,面向代理(客户端只与代理类交互)。话不多说,看......
  • 23种设计模式-工厂方法模式介绍加实战代码
    1、描述工厂方法模式是对简单工厂模式的抽象提取。有一个抽象的Factory类(可以是抽象类和接口),这个类将不再负责具体的产品生产,而是只制定一些规范,具体的生产工作由其子类......
  • 桥接模式
    两个维度的桥接模式用桥接模式实现在路上开车这个问题,其中,车可以是car或bus,路可以是水泥路或沥青路。 类图  java  packagerjsj.no9;publicclassCar......
  • 简单工厂模式带实战(不属于GOF的23种经典设计模式)
    简单工厂模式带实战(不属于GOF的23种经典设计模式)1、描述简单工厂模式是属于创建型模式,又叫做静态工厂方法(StaticFactoryMethod)模式,但不属于23种GOF设计模式之一。简单......
  • UML建模语言、设计原则、设计模式
    1、UML统一建模语言定义:用于软件系统设计与分析的语言工具目的:帮助开发人员更好的梳理逻辑、思路学习地址:UML概述_w3cschool官网:https://www.omg.org/spec/UML1.1......
  • 23种设计模式-原型设计模式介绍加实战
    1、描述用原型实例指定创建对象的种类,并且通过拷贝这些原型对象的属性来创建新的对象。通俗点的意思就是一个对象无需知道任何创建细节就可以创建出另外一个可定制的对象......
  • 常见的设计模式
    单例模式:单例模式是指在内存中只会创建且仅创建一次对象的设计模式。在程序中多次使用同一个对象且作用相同时,为了防止频繁地创建对象使得内存飙升,单例模式可以让程序仅在......
  • 【解决方案】浅谈基于边缘计算的智慧工地解决方案
            基于边缘计算的智慧工地解决方案将AI技术深度融合应用于传统建筑行业安全监控工作,通过在工地放置一个边缘AI分析终端,完成基于智能视频分析技术自主研发视觉......
  • 设计模式
    原型模式(Prototype)原型模式是一种创建型模式,它允许一个对象再创建另外一个可定制的对象,根本无需知道创建的细节。当直接创建对象的代价比较大时,则采用这种模式。在Java中......