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

《设计模式》桥接模式

作者: 敏捷Studio | 来源:发表于2019-08-25 14:02 被阅读0次

基本介绍

定义

将抽象部分与实现部分分离,使它们都可以独立的变化。

介绍

  • 桥接模式属于结构型模式。
  • 举个生活中的例子,一条数据线,一头USB接口的可以连接电脑、充电宝等等,另一头可以连接不同品牌的手机,通过这条数据线,两头不同的东西就可以连接起来,这就是桥接模式。

UML类图

桥接模式UML类图

角色说明:

  • Abstraction(抽象化角色):一般是抽象类,定义该角色的行为,同时保存一个对实现化角色的引用。
  • Implementor(实现化角色):接口或者抽象类,定义角色必需的行为和属性。
  • ConcreteImplementorA、ConcreteImplementorB(具体实现化角色):实现角色的具体行为。

具体实现

这里以穿衣服为例,不同职业的人可能要穿的衣服不一样。

1、创建实现化角色。定义一个衣服接口:

interface Clothes {
  String getName();
}

2、创建具体实现化角色。创建两种衣服类:校服和衬衫。

public class Uniform implements Clothes {
  @Override
  public String getName() {
    return "校服";
  }
}

public class Shirt implements Clothes {
  @Override
  public String getName() {
    return "衬衫";
  }
}

3、创建抽象化角色。定义一个人物类,有一个穿衣服的方法,并且持有衣服类的引用。即抽象化角色持有实现化角色的引用,可以调用实现化角色的方法,达到桥接的作用。

public abstract class Person {
  // 持有衣服类的引用
  Clothes mClothes;

  public void setClothes(Clothes clothes) {
    mClothes = clothes;
  }
  
  // 穿衣服
  protected abstract void dress();
}

4、创建具体抽象化角色。这里有两种角色穿衣服:学生和程序员。

public class Student extends Person {
  @Override
  protected void dress() {
    System.out.println("学生穿上" + mClothes.getName());
  }
}

public class Coder extends Person {
  @Override
  protected void dress() {
    System.out.println("程序员穿上" + mClothes.getName());
  }
}

5、客户端测试:

public void test() {
  // 创建各种衣服对象
  Clothes uniform = new Uniform();
  Clothes shirt = new Shirt();

  // 不同职业的人穿衣服
  Person coder = new Coder();
  coder.setClothes(shirt);
  coder.dress();

  System.out.println("--------------------------------------");
  Person student = new Student();
  student.setClothes(uniform);
  student.dress();

  System.out.println("--------------------------------------");
  student.setClothes(shirt);
  student.dress();
}

输出结果:

程序员穿上衬衫
--------------------------------------
学生穿上校服
--------------------------------------
学生穿上衬衫

6、其他说明:
通过上面的例子可以看到,我们分离了两端的变化。新增衣服和新增职业都变的非常简单。假如我们再增一个维度的变化,例如加个年龄来区分怎么办?这时我们就可以把Person类作为实现化角色,把不同年龄段作为抽象化角色,代码就不写了,有兴趣可以去实现一下。

模式总结

应用场景

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

优点

  • 分离了抽象与实现。让抽象部分和实现部分独立开来,分别定义接口,这有助于对系统进行分层,从而产生更好的结构化的系统。
  • 良好的扩展性。抽象部分和实现部分都可以分别独立扩展,不会相互影响。

缺点

  • 增加了系统的复杂性。
  • 不容易设计,抽象与实现的分离要设计得好比较有难度。

Android中的源码分析

桥接模式在Android中的源码应用还是非常广泛的。比如AbsListViewListAdapter之间就是一个桥接模式。

1、AbsListViewListAdapter 之间的桥接模式
相关代码就不贴了,看下它们的UML类图就明白了。

AbsListView 与 ListAdapter 之间的桥接模式

这里AbsListView是抽象化角色,ListAdapter则是实现化角色。

2、其他
另外,WindowWindowManager 之间也是桥接模式。有兴趣的可以去看下源码体会体会。

相关文章

  • 设计模式-桥接模式

    设计模式-桥接模式 定义 桥接模式(Bridge Pattern)也称为桥梁模式、接口(Interface)模式或...

  • 桥接模式

    设计模式:桥接模式(Bridge)

  • 设计模式——桥接模式

    设计模式——桥接模式 最近公司组件分享设计模式,然而分配给我的是桥接模式。就在这里记录我对桥接模式的理解吧。 定义...

  • 设计模式之桥接模式

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

  • 桥接模式

    介绍 桥接模式(Bridge Pattern) 也称为桥梁模式,是结构型设计模式之一。桥接模式的作用就是连接 "两...

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

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

  • 设计模式-桥接模式

    桥接模式介绍 桥接模式(Bridge Pattern)也称为桥梁模式,是结构型设计模式之一。顾名思义其与现实中的桥...

  • Android设计模式——桥接模式(七大结构型)

    1.桥接模式介绍 桥接模式(Bridge Pattern)也称为桥梁模式,是七大结构型设计模式之一。 2....

  • 2、桥接模式(结构型)

    第一次接触桥接模式是在刷面试题时,遇到问jdbc主要用到的设计模式是?桥接模式。 桥接模式(Bridge):将抽象...

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

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

网友评论

    本文标题:《设计模式》桥接模式

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