美文网首页
Java设计模式之桥接模式

Java设计模式之桥接模式

作者: bamboolmc | 来源:发表于2018-05-16 22:47 被阅读0次

概念

桥接模式:亦称Bridge模式,构造型设计模式之一。
  将抽象部分(abstraction)和它的实现部分(implementor)分离,使这两部分能够独立的变化与扩展。
  将继承关系转换为关联关系,降低了类与类之间的耦合,降低代码量。

UML

桥接模式

角色

  • 抽象部分(Abstraction):该类保存一个对实现部分对象的引用。抽象部分的方法需要调用实现部分的对象来实现,一般为abstract类。
  • 优化的抽象部分(RefinedAbstraction):抽象部分的具体实现,修正或完善抽象部分的方法
  • 实现部分 (Implementor):可以为抽象类或接口,实现部分的方法不一定要与抽象部分方法一致。它提供的是底层的方法,供抽象部分定义的上层的业务方法进行调用。
  • 具体实现的实现部分(ConcreteImplementorA/ConcreteImplementorB):实现部分的具体实现,可认为是实现部分中方法的具体实现
  • 客户类(Client):桥接模式的具体使用者。

简单示例

最近手机摔了,破相了。无奈再换个新的吧,目前对性能没有太大的要求,就是需要能存储东西即可,性价比高当然更好了。选什么品牌呢?选多大的存储呢?这是个问题。这不就是可以用桥接模式么。

Implementor类:
实现部分(存储ROM)的抽象接口

package com.bamboolmc.designpattern.BridgeMode;

public interface ROM {
    /**
     * 配置ROM大小
     */
    public void ConfigRom ();
}

ConcreteImplementor类:
实现部分(存储ROM)的具体实现(32G/64G)

package com.bamboolmc.designpattern.BridgeMode;

public class ROM_32 implements ROM {
    @Override
    public void ConfigRom() {
        System.out.println("ROM配置了32G,只能存一些照片、电影");
    }
}
package com.bamboolmc.designpattern.BridgeMode;

public class ROM_64 implements ROM{
    @Override
    public void ConfigRom() {
        System.out.println("ROM配置了64G,能存放很多照片、电影");
    }
}

Abstraction类:
抽象部分(Mobile)的抽象类

package com.bamboolmc.designpattern.BridgeMode;

public abstract class Mobile {
    private ROM rom;

    public Mobile(ROM rom) {
        this.rom = rom;
    }

    public ROM getRom() {
        return rom;
    }

    public void setRom(ROM rom) {
        this.rom = rom;
    }

    public abstract void installROM();
}

Refined Abstraction类:
抽象部分(Mobile)的具体实现(Huawei/XiaoMi)

package com.bamboolmc.designpattern.BridgeMode;

public class HuaWei extends Mobile{
    public HuaWei(ROM rom) {
        super(rom);
    }

    @Override
    public void installROM() {
        System.out.println("HuaWei mobile:");
        this.getRom().ConfigRom();

    }
}
package com.bamboolmc.designpattern.BridgeMode;

public class XiaoMi extends Mobile{

    public XiaoMi(ROM rom) {
        super(rom);
    }

    @Override
    public void installROM() {
        System.out.println("XiaoMi mobile:");
        this.getRom().ConfigRom();

    }
}

Clicent类:

package com.bamboolmc.designpattern.BridgeMode;

public class BridgeClicent {
    public static void main(String[] args){
        ROM rom32g = new ROM_32();
        Mobile huawei = new HuaWei(rom32g);
        huawei.installROM();

        ROM rom64g = new ROM_64();
        Mobile xiaomi = new XiaoMi(rom64g);
        xiaomi.installROM();
    }
}

疑问

抽象部分和实现部分哪里进行了桥接?
抽象部分(Abstraction)保存一个对实现部分对象的引用,针对上述的示例,具体如下:
引用一:
抽象部分Mobile保存一个对实现部分ROM的引用

public abstract class Mobile {
    private ROM rom;

    public Mobile(ROM rom) {
        this.rom = rom;
    }
}

具体使用时实现:

public static void main(String[] args){
    ROM rom32g = new ROM_32();
    Mobile huawei = new HuaWei(rom32g);
}

适用环境

  • 一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。
  • 对于那些不希望使用继承,或者使用多层继承导致系统类个数急剧增长的系统。
  • 如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象层建立一个关联关系。

优缺点

缺点

  • 使用范围的局限性,要求能够正确识别独立变化的维度。
  • 聚合关联关系在抽象层,增加了理解难度;要求开发者在抽象层中进行设计与编程,增加了设计难度。

优点

  • 分离抽象部分与实现部分,耦合度更低。
  • 提高系统可扩充性,维度任意变化,不影响原系统。
  • 隐藏实现细节,实现细节对客户不透明。

相关文章

  • Java设计模式——桥接模式

    Java设计模式之桥接模式 回顾 上一期分享了适配器模式,主要为了实现解耦 桥接模式 简介 桥接模式是对象的结构模...

  • 设计模式之桥接模式

    设计模式之桥接模式 1. 模式定义 桥接模式又称柄体模式或接口模式,它是一种结构性模式。桥接模式将抽象部分与实现部...

  • Java设计模式<桥接模式>

    Java设计模式<桥接模式> 意图 桥接模式就是把事物和其具体实现分开,使他们可以各自独立的变化。桥接的用意是:将...

  • Java设计模式之桥接模式

    概念 桥接模式:亦称Bridge模式,构造型设计模式之一。  将抽象部分(abstraction)和它的实现部分(...

  • java设计模式之桥接模式

    参考文章: http://c.biancheng.net/view/1364.html

  • Java设计模式之桥接模式

    定义 将事物实现从各维度抽象出来,各维度独立变化,之后通过聚合或依赖的方式组合起来,减少各维度之间的相互耦合,从而...

  • java设计模式之桥接模式

    桥接模式 桥接(Bridge Pattern)将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实...

  • java/android 设计模式学习笔记(8)---桥接模式

    java/android 设计模式学习笔记(8)---桥接模式 【备注】只用于个人收藏

  • Java设计模式--桥接模式

    桥接模式就是创建一道桥梁来连接两种类,一般都是对抽象和实现的桥接。对于那些不希望使用继承或因为多层次继承导致系统类...

  • Java设计模式----桥接模式

    场景 商城系统中常见的商品分类,以电脑为例,如何良好的处理商品分类销售的问题? 下图的关系我们可以用多继承结构来实...

网友评论

      本文标题:Java设计模式之桥接模式

      本文链接:https://www.haomeiwen.com/subject/fpppdftx.html