IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> 设计模式之桥接模式 -> 正文阅读

[开发测试]设计模式之桥接模式

什么是桥接模式

官方解释:桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。

我的理解:将原来有关联的类全都单独剥离出来,比如A继承B,B继承C,单独封装为A、B、C,解除三者的继承关系,实现解耦,以免继承太多,给代码维护造成较高的成本。

使用场景

人开着车在桥上跑,人可以是男人、女人,车可以是公交车、汽车、三轮车,桥可以是铁桥、木桥、石桥。传统模式的写法就是人继承车,车继承桥,但是由于这三个维度都有多种变化,如果用继承来写,势必会造成类的爆炸。

传统模式与桥接模式示意图

优点

?两种模式的差别显而易见,左边这种会虽然维度的增加或者每个维度变化的增加而已指数倍增长,,而桥接模式实现了解耦,使其互不关联,互不影响,这用成语来说叫做分而治之,每个类只做一件事情,符合设计原则的单一原则,维度的增加与变化的增加不会影响之前的类,符合开闭原则

代码实例

目录结构:

?Bridge.php 抽象桥和实现桥类

<?php

/**
 * 抽象桥
 * Class Bridge
 */
abstract class Bridge
{
    public $car;//车
    public $people;//人
    public $bridge;//桥

    abstract function setBridge();

    /**
     * 人开着车在桥上跑
     */
    public function run()
    {
        $this->setBridge();
        echo "<h3>".$this->people->setPeople() . $this->car->setCar() . $this->bridge."</h3>";
    }
}

/**
 * 铁桥实现
 * Class TieBridge
 */
class TieBridge extends Bridge
{
    public function setBridge()
    {
        // TODO: Implement setBridge() method.
        $this->bridge = '在铁桥上跑';
    }
}

/**
 * 木桥实现
 * Class MuBridge
 */
class MuBridge extends Bridge
{
    public function setBridge()
    {
        // TODO: Implement setBridge() method.
        $this->bridge = '在木桥上跑';
    }
}

/**
 * 石桥实现
 * Class ShiBridge
 */
class ShiBridge extends Bridge
{
    public function setBridge()
    {
        // TODO: Implement setBridge() method.
        $this->bridge = '在石桥上跑';
    }
}

Car.php 抽象车和实现车类:

<?php

/**
 * 抽象车
 * Class Car
 */
abstract class Car{
    abstract function setCar();
}

/**
 * 公交车实现
 * Class Bus
 */
class Bus extends Car{
    public function setCar()
    {
        // TODO: Implement run() method.
        return "公交车";
    }
}

/**
 * 汽车实现
 * Class Qiche
 */
class Qiche extends Car{
    public function setCar()
    {
        // TODO: Implement run() method.
        return "汽车";
    }
}

/**
 * 三轮车实现
 * Class Sanlun
 */
class Sanlun extends Car{
    public function setCar()
    {
        // TODO: Implement run() method.
        return "三轮车";
    }
}

People.php 抽象人和实现人类:

<?php

/**
 * 抽象人
 * Class People
 */
abstract class People{
   abstract function setPeople();
}

/**
 * 男人实现
 * Class Man
 */
class Man extends People{
    public function setPeople()
    {
        // TODO: Implement setPeople() method.
        return "男人开着";
    }
}

/**
 * 女人实现
 * Class Women
 */
class Women extends People{
    public function setPeople()
    {
        // TODO: Implement setPeople() method.
        return "女人开着";
    }
}

Client.php 调用

<?php
require_once 'Bridge.php';
require_once 'Car.php';
require_once 'People.php';

$bridge = new MuBridge();
$bridge->car = new Bus();
$bridge->people = new Women();
$bridge->run();
echo "分割线-------------------------------------------------------------------";
$bridge = new TieBridge();
$bridge->car = new Qiche();
$bridge->people = new Man();
$bridge->run();
echo "分割线-------------------------------------------------------------------";
$bridge = new ShiBridge();
$bridge->car = new Sanlun();
$bridge->people = new Women();
$bridge->run();

运行结果

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-12-03 13:19:52  更:2021-12-03 13:21:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 4:47:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码