设计模式-桥接模式

设计模式-桥接模式 桥接模式(Bridge Pattern)详解一、模式概述桥接模式是一种结构型设计模式,它将抽象部分与实现部分分离,使它们都可以独立地变化。通过组合代替继承,解决多维度变化导致的类爆炸问题。就像遥控器(抽象)和电视(实现)——不同品牌的遥控器可以控制不同品牌的电视,两者独立发展。二、模式结构1. 核心角色text┌─────────────────┐ ┌─────────────────┐ │ Abstraction │──────────│ Implementor │ │ (抽象化) │ has-a │ (实现类接口) │ └────────┬────────┘ └────────┬────────┘ ▲ ▲ │ │ ┌────────┴────────┐ ┌────────┴────────┐ │ RefinedAbstraction│ │ ConcreteImplementor│ │ (修正抽象化) │ │ (具体实现类) │ └──────────────────┘ └─────────────────┘2. 角色职责角色名称职责Abstraction抽象化定义抽象接口,持有Implementor引用RefinedAbstraction修正抽象化扩展抽象接口,增加新功能Implementor实现类接口定义实现类的接口(通常比抽象接口更底层)ConcreteImplementor具体实现类实现Implementor接口,提供具体操作三、基础实现示例示例:图形绘制系统(形状 + 颜色)java// 1. 实现类接口:颜色 interface Color { String applyColor(); } // 2. 具体实现类:各种颜色 class Red implements Color { @Override public String applyColor() { return "红色"; } } class Blue implements Color { @Override public String applyColor() { return "蓝色"; } } class Green implements Color { @Override public String applyColor() { return "绿色"; } } // 3. 抽象化:形状 abstract class Shape { protected Color color; // 桥接颜色实现 public Shape(Color color) { this.color = color; } abstract String draw(); } // 4. 修正抽象化:各种形状 class Circle extends Shape { public Circle(Color color) { super(color); } @Override String draw() { return "绘制" + color.applyColor() + "圆形"; } } class Rectangle extends Shape { public Rectangle(Color color) { super(color); } @Override String draw() { return "绘制" + color.applyColor() + "矩形"; } } class Triangle extends Shape { public Triangle(Color color) { super(color); } @Override String draw() { return "绘制" + color.applyColor() + "三角形"; } } // 客户端使用 public class BridgeDemo { public static void main(String[] args) { // 创建不同颜色和形状的组合 Shape redCircle = new Circle(new Red()); Shape blueRectangle = new Rectangle(new Blue()); Shape greenTriangle = new Triangle(new Green()); System.out.println(redCircle.draw()); // 绘制红色圆形 System.out.println(blueRectangle.draw()); // 绘制蓝色矩形 System.out.println(greenTriangle.draw()); // 绘制绿色三角形 // 动态组合:运行时改变颜色 Shape circle = new Circle(new Red()); System.out.println(circle.draw()); // 绘制红色圆形 // 切换颜色实现 circle.color = new Blue(); System.out.println(circle.draw()); // 绘制蓝色圆形 } }四、桥接模式解决的痛点1.多维度继承的类爆炸问题