设计模式-桥接模式
·
桥接模式(Bridge Pattern)是一种结构型设计模式,用于将抽象部分与其实现部分分离,使它们可以独立变化。该模式通过组合关系替代继承关系,降低了抽象和实现之间的耦合度。
桥接模式的结构
桥接模式通常包含以下角色:
- 抽象化(Abstraction):定义抽象类的接口,维护一个指向实现化对象的引用。
- 扩展抽象化(RefinedAbstraction):扩展抽象化角色,改变或修正父类对抽象化的定义。
- 实现化(Implementor):定义实现类的接口,供抽象化角色调用。
- 具体实现化(ConcreteImplementor):实现实现化接口的具体类。

桥接模式的实现示例
package cn.wjh.designpattern.bridge;
/**
* 品牌
*/
public interface Brand {
void open();
void close();
void call();
}
package cn.wjh.designpattern.bridge;
public abstract class Phone {
private final Brand brand;
public Phone(Brand brand) {
super();
this.brand = brand;
}
/**
* 开机
*/
protected void open(){
this.brand.open();
}
/**
* 关机
*/
protected void close(){
this.brand.close();
}
/**
* 拨打电话
*/
protected void call(){
this.brand.call();
}
}
package cn.wjh.designpattern.bridge;
/**
* 苹果手机
*/
public class Apple implements Brand{
@Override
public void open() {
System.out.println("苹果手机开机");
}
@Override
public void close() {
System.out.println("苹果手机关机");
}
@Override
public void call() {
System.out.println("苹果手机打电话");
}
}
package cn.wjh.designpattern.bridge;
/**
* 小米手机
*/
public class XiaoMi implements Brand{
@Override
public void open() {
System.out.println("小米手机开机");
}
@Override
public void close() {
System.out.println("小米手机关机");
}
@Override
public void call() {
System.out.println("小米手机打电话");
}
}
package cn.wjh.designpattern.bridge;
/**
* iPhone18ProMax
*/
public class IPhone18PM extends Phone{
public IPhone18PM(Brand brand) {
super(brand);
}
public void open(){
super.open();
System.out.println("IPhone18PM open");
}
public void close(){
super.close();
System.out.println("IPhone18PM close");
}
public void call(){
super.call();
System.out.println("IPhone18PM call");
}
}
package cn.wjh.designpattern.bridge;
/**
* 小米18
*/
public class XiaoMi18 extends Phone{
public XiaoMi18(Brand brand) {
super(brand);
}
public void open(){
super.open();
System.out.println("XiaoMi18 open");
}
public void close(){
super.close();
System.out.println("XiaoMi18 close");
}
public void call(){
super.call();
System.out.println("XiaoMi18 call");
}
}
package cn.wjh.designpattern.bridge;
public class Main {
public static void main(String[] args) {
IPhone18PM iPhone18PM = new IPhone18PM(new Apple());
iPhone18PM.open();
iPhone18PM.call();
iPhone18PM.close();
System.out.println("-------------------------------------------");
XiaoMi18 xiaoMi18 = new XiaoMi18(new XiaoMi());
xiaoMi18.open();
xiaoMi18.call();
xiaoMi18.close();
}
}
运行结果

桥接模式的优点
- 解耦抽象与实现:抽象和实现可以独立扩展,互不影响。
- 提高扩展性:可以动态切换实现类,无需修改抽象层代码。
- 符合开闭原则:新增抽象或实现类时,无需修改现有代码。
桥接模式的应用场景
- 当一个类存在多个独立变化的维度时,可以使用桥接模式将这些维度分离。
- 避免因多层继承导致的类爆炸问题。
- 需要在运行时切换不同实现时。
桥接模式与适配器模式的区别
- 桥接模式:设计初期使用,目的是将抽象与实现分离。
- 适配器模式:后期使用,目的是让不兼容的接口协同工作。
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐

所有评论(0)