布局型模式-桥接模式

[复制链接]
发表于 2025-12-18 07:43:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
桥接模式(Bridge Pattern)是一种布局型筹划模式,旨在将抽象部门与它的实现部门分离,以便两者可以独立地变革。它通过提供一个抽象层将它们毗连起来,从而克制了类的爆炸式扩展,尤其在面对复杂对象时显得特别有用。
核心头脑

桥接模式的核心是组合优于继承。它使用组合的方式,将一个类的抽象部门和实现部门分离开,使得它们可以独立地扩展,而不是通过继承强耦合在一起。
布局

桥接模式的重要到场者有以下几个部门:

  • 抽象类(Abstraction): 界说高层的抽象接口,维护一个指向实现部门(Implementor)的引用。
  • 实现类接口(Implementor): 界说实现类的接口,通常是抽象方法。
  • 详细实现类(ConcreteImplementor): 实现 Implementor 接口,界说详细实现。
  • 扩展抽象类(RefinedAbstraction): 在抽象类的根本上举行扩展,通常会调用 Implementor 的方法。
案例代码

示例:绘图工具
假设你想筹划一个可以绘制形状(圆形、正方形)的工具,同时必要支持多种颜色(赤色、蓝色)。
  1. // 实现接口
  2. interface Color {
  3.     void applyColor();
  4. }
  5. // 具体实现类
  6. class RedColor implements Color {
  7.     @Override
  8.     public void applyColor() {
  9.         System.out.println("Applying red color.");
  10.     }
  11. }
  12. class BlueColor implements Color {
  13.     @Override
  14.     public void applyColor() {
  15.         System.out.println("Applying blue color.");
  16.     }
  17. }
  18. // 抽象类
  19. abstract class Shape {
  20.     protected Color color; // 组合颜色
  21.     public Shape(Color color) {
  22.         this.color = color;
  23.     }
  24.     abstract void draw();
  25. }
  26. // 扩展抽象类
  27. class Circle extends Shape {
  28.     public Circle(Color color) {
  29.         super(color);
  30.     }
  31.     @Override
  32.     void draw() {
  33.         System.out.print("Drawing Circle with ");
  34.         color.applyColor();
  35.     }
  36. }
  37. class Square extends Shape {
  38.     public Square(Color color) {
  39.         super(color);
  40.     }
  41.     @Override
  42.     void draw() {
  43.         System.out.print("Drawing Square with ");
  44.         color.applyColor();
  45.     }
  46. }
  47. // 使用桥接模式
  48. public class BridgePatternDemo {
  49.     public static void main(String[] args) {
  50.         Shape redCircle = new Circle(new RedColor());
  51.         Shape blueSquare = new Square(new BlueColor());
  52.         redCircle.draw();
  53.         blueSquare.draw();
  54.     }
  55. }
复制代码
实用场景


  • 必要在多个维度上扩展类时,比方形状和颜色。
  • 不盼望类之间有紧耦合关系,想通过组合进步机动性。
  • 克制继承体系膨胀的题目。
优缺点


  • 优点
    解耦:抽象和实现分离,便于独立变革。
    扩展性强:可以独立扩展抽象层或实现层。
    遵照开闭原则:新增功能时无需修改现有代码。
  • 缺点
    增长了体系的复杂性,尤其在简朴场景下,大概显得“过分筹划”。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表