设计模式(14) -- 桥接模式

简介: 设计模式(14) -- 桥接模式

需求:手机操作问题


1dc618a0ed9580ce8bfa6facb208c08f.png


传统方案解决手机操作问题


5d4c6812c8535adbb050f4ddf2e1bce8.png


引出的问题


46a9d80a6e05e4e3b19d57a0ee70bcdf.png


桥接模式:


基本介绍


1dc618a0ed9580ce8bfa6facb208c08f.png


桥接模式Bridge原理类图


5d4c6812c8535adbb050f4ddf2e1bce8.png


原理:类图说明


1)Client 类:桥接模式的调用者


2)抽象类 (Abstraction) 维护了 Implementor ,即它的实现类 ConcreteImplementorA…, 二者是聚合关系 , Abstraction充当桥接类


桥接模式解决手机操作问题


46a9d80a6e05e4e3b19d57a0ee70bcdf.png


类图


66ba272a0bfc97be54a5fa679e3d5482.png

代码实现

Brand


//接口
public interface Brand {
  void open();
  void close();
  void call();
}


Vivo


public class Vivo implements Brand {
  @Override
  public void open() {
  // TODO Auto-generated method stub
  System.out.println(" Vivo手机开机 ");
  }
  @Override
  public void close() {
  // TODO Auto-generated method stub
  System.out.println(" Vivo手机关机 ");
  }
  @Override
  public void call() {
  // TODO Auto-generated method stub
  System.out.println(" Vivo手机打电话 ");
  }
}


XiaoMi


public class XiaoMi implements Brand {
  @Override
  public void open() {
  // TODO Auto-generated method stub
  System.out.println(" 小米手机开机 ");
  }
  @Override
  public void close() {
  // TODO Auto-generated method stub
  System.out.println(" 小米手机关机 ");
  }
  @Override
  public void call() {
  // TODO Auto-generated method stub
  System.out.println(" 小米手机打电话 ");
  }
}


Phone


public abstract class Phone {
  //组合品牌
  private Brand brand;
  //构造器
  public Phone(Brand brand) {
  super();
  this.brand = brand;
  }
  protected void open() {
  this.brand.open();
  }
  protected void close() {
  brand.close();
  }
  protected void call() {
  brand.call();
  } 
}


FoldedPhone


//折叠式手机类,继承 抽象类 Phone
public class FoldedPhone extends Phone {
  //构造器
  public FoldedPhone(Brand brand) {
  super(brand);
  }
  public void open() {
  super.open();
  System.out.println(" 折叠样式手机 ");
  }
  public void close() {
  super.close();
  System.out.println(" 折叠样式手机 ");
  }
  public void call() {
  super.call();
  System.out.println(" 折叠样式手机 ");
  }
}


UpRightPhone


public class UpRightPhone extends Phone {
  //构造器
  public UpRightPhone(Brand brand) {
    super(brand);
  }
  public void open() {
    super.open();
    System.out.println(" 直立样式手机 ");
  }
  public void close() {
    super.close();
    System.out.println(" 直立样式手机 ");
  }
  public void call() {
    super.call();
    System.out.println(" 直立样式手机 ");
  }
}


Client


public class Client {
  public static void main(String[] args) {
  //获取折叠式手机 (样式 + 品牌 )
  Phone phone1 = new FoldedPhone(new XiaoMi());
  phone1.open();
  phone1.call();
  phone1.close();
  System.out.println("=======================");
  Phone phone2 = new FoldedPhone(new Vivo());
  phone2.open();
  phone2.call();
  phone2.close();
  System.out.println("==============");
  UpRightPhone phone3 = new UpRightPhone(new XiaoMi());
  phone3.open();
  phone3.call();
  phone3.close();
  System.out.println("==============");
  UpRightPhone phone4 = new UpRightPhone(new Vivo());
  phone4.open();
  phone4.call();
  phone4.close();
  }
}


运行结果:

1dc618a0ed9580ce8bfa6facb208c08f.png


应用


桥接模式在JDBC的源码剖析


5d4c6812c8535adbb050f4ddf2e1bce8.png

46a9d80a6e05e4e3b19d57a0ee70bcdf.png



桥接模式其它应用场景


66ba272a0bfc97be54a5fa679e3d5482.png


桥接模式的注意事项和细节


1dc618a0ed9580ce8bfa6facb208c08f.png

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