设计模式 | 桥接模式

简介: 设计模式 | 桥接模式

说明

在开发过程中,我们很多类具都是具有两个或多个维度以上的,例如 图形可以按照形状分,也可以按照颜色分。

在生活中也会出现很多例子,比方说:现需要提供大中小3种型号的画笔,能够绘制5种不同颜色,如果使用蜡笔,我们需要准备3*5=15支蜡笔,也就是说必须准备15个具体的蜡笔类。而如果使用毛笔的话,只需要3种型号的毛笔,外加5个颜料盒,用3+5=8个类就可以实现15支蜡笔的功能。

上面的例子可以很明显的看出来,如果不采用桥接模式的话,我随意增加颜色都会导致代码量急剧增加,并且毫无扩展性可言。我们需要把这种强关联改成弱关联,角色与角色之间应该是可以随意修改。

定义:将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度

示例

我们常见的,一个手机是可以安装多款软件,多个手机也可以随意安装多款软件,我们不可能让一个手机去只安装一个软件,软件是很灵活的,这个时候我们可以采用桥接模式将抽象部分与它的实现部分分离开来,使他们都可以独立变化。

例如: 我们两个有小米和苹果手机,可以随意安装王者荣耀和刺激战场,安装这个步骤应该是属于十分灵活的,我随时可以安装 当然也可以随时使用不同手机安装,我们来看一下实现

<?php
/**
 * Created by 憧憬.
 */
/**
 * 游戏抽象
 * Class Game
 */
abstract class Game {
    protected $game = null;
    public function getGame()
    {
        return $this->game;
    }
}
/**
 * 手机抽象
 * Class Phone
 */
abstract class Phone {
    protected $game = null;
    public function setGame($game)
    {
        $this->game = $game;
    }
    abstract public function play();
}
/**
 * 王者荣耀
 * Class WangzheRongYao
 */
class WangzheRongYao extends Game {
    public function __construct()
    {
        $this->game = '王者荣耀';
    }
}
/**
 * 吃鸡
 * Class HePingJingYing
 */
class HePingJingYing extends Game {
    public function __construct()
    {
        $this->game = '和平精英';
    }
}
/**
 * 苹果手机
 * Class IosPhone
 */
class IosPhone extends Phone {
    public $phone = 'ios phone';
    public function play()
    {
        echo 'use ' . $this->phone . ' play ' . $this->game->getGame();
    }
}
/**
 * 小米手机
 * Class XiaoMiPhone
 */
class XiaoMiPhone extends Phone {
    public $phone = 'xiaomi phone';
    public function play()
    {
        echo 'use ' . $this->phone . ' play ' .$this->game->getGame();
    }
}
$xiaoMiPhone = new XiaoMiPhone();
$xiaoMiPhone->setGame(new WangzheRongYao());
$xiaoMiPhone->play(); // use xiaomi phone play 王者荣耀

使用场景:

  • 你不希望在抽象和他的实现部分之间有一个固定的邦定关系,如在程序的运行时刻实现部分应该可以被选择或者切换。
  • 类的抽象以及他的视像都可以通过生成子类的方法加以扩充。这时bridge模式使你可以对不同的抽象接口和实现部分进行组合,并对他们进行扩充。
  • 对一个抽象的实现部分的修改应该对客户不产生影响,即客户的代码不需要重新编译。
  • 你想对客户完全隐藏抽象的实现部分。
  • 你想在多个实现间 共享实现,但同时要求客户并不知道这一点。

本文为作者原创,手码不易,允许转载,转载后请以链接形式说明文章出处。

目录
相关文章
|
5月前
|
设计模式 开发者
【设计模式】第七篇:和我一起简单认识桥接模式
实现的意思并不是指抽象的派生类,而是指通过组合来代替继承关系,从而降低抽象和具体实现产品两个可变换维度之间的耦合,就像我们的相机品牌和相机产品类型之间的分离
52 4
|
6月前
|
设计模式 Java
【设计模式】JAVA Design Patterns——Bridge(桥接模式)
【设计模式】JAVA Design Patterns——Bridge(桥接模式)
【设计模式】JAVA Design Patterns——Bridge(桥接模式)
|
6月前
|
设计模式 Oracle Java
设计模式--- 桥接模式、JDBC 源码剖析(桥接)
设计模式--- 桥接模式、JDBC 源码剖析(桥接)
120 2
|
6月前
|
设计模式
设计模式之桥接模式
设计模式之桥接模式
|
6月前
|
设计模式 Linux Windows
【设计模式】桥接模式
【设计模式】桥接模式
|
1月前
|
设计模式 PHP 开发者
PHP中的设计模式:桥接模式的解析与应用
在软件开发的浩瀚海洋中,设计模式如同灯塔一般,为开发者们指引方向。本文将深入探讨PHP中的一种重要设计模式——桥接模式。桥接模式巧妙地将抽象与实现分离,通过封装一个抽象的接口,使得实现和抽象可以独立变化。本文将阐述桥接模式的定义、结构、优缺点及其应用场景,并通过具体的PHP示例代码展示如何在实际项目中灵活运用这一设计模式。让我们一起走进桥接模式的世界,感受它的魅力所在。
|
2月前
|
设计模式 自然语言处理 算法
PHP中的设计模式:桥接模式的深入探索与应用
在PHP开发中,理解并运用设计模式是提升代码质量与可维护性的关键。本文聚焦于桥接模式——一种结构型设计模式,它通过封装一个抽象的接口,将实现与抽象分离,从而使得它们可以独立变化。不同于传统摘要的概述式表述,本文将以故事化的情境引入,逐步解析桥接模式的精髓,通过PHP代码示例详细展示其在实际项目中的应用,旨在为读者提供一个既深刻又易于理解的学习体验。
27 1
|
2月前
|
设计模式 Java
Java设计模式-桥接模式(9)
Java设计模式-桥接模式(9)
|
1月前
|
设计模式 Java
Java设计模式之桥接模式
这篇文章介绍了Java设计模式中的桥接模式,包括桥接模式的目的、实现方式,并通过具体代码示例展示了如何分离抽象与实现,使得两者可以独立变化。
43 0
|
3月前
|
设计模式 XML 存储
【七】设计模式~~~结构型模式~~~桥接模式(Java)
文章详细介绍了桥接模式(Bridge Pattern),这是一种对象结构型模式,用于将抽象部分与实现部分分离,使它们可以独立地变化。通过实际的软件开发案例,如跨平台视频播放器的设计,文章阐述了桥接模式的动机、定义、结构、优点、缺点以及适用场景,并提供了完整的代码实现和测试结果。桥接模式适用于存在两个独立变化维度的系统,可以提高系统的可扩展性和灵活性。
【七】设计模式~~~结构型模式~~~桥接模式(Java)