设计模式——桥接模式

介绍

将抽象与实现解耦合,使得二者可以独立变化。这中模式涉及到一个作为桥接的接口,使得实体类功能独立于接口实现类,这两种类型的类可被解构化改变而互不影响。

意图

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

解决

有多种可能会变化的情况下,使用继承造成类爆炸,扩展不灵活。

优点

  1. 抽象与实现分离;
  2. 优秀的扩展;
  3. 实现细节对客户透明。

缺点

  1. 增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者对抽象类进行设计与编程。

使用场景

  1. 一个系统在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接使得他们在抽象层建立一个关联;
  2. 对于那些不希望使用继承或因为多层继承导致系统类的个数急剧增加的系统;
  3. 一个类存在两个对立变化的维度,且两个维度都要进行扩展。

UML

示例

DrawAPI.java

package cn.geoaryblog.design.cretedg.bridge;

public interface DrawAPI {
    void drawCircle(int radius, int x, int y);
}

RedCircle.java

package cn.geoaryblog.design.cretedg.bridge;

public class RedCircle implements DrawAPI {
    @Override
    public void drawCircle(int radius, int x, int y) {
        System.out.println("当前是红色的圆,半径是:" + radius + " 坐标:x=" + x + ", y=" + y);
    }
}

GreenCircle.java

package cn.geoaryblog.design.cretedg.bridge;

public class GreenCircle implements DrawAPI {
    @Override
    public void drawCircle(int radius, int x, int y) {
        System.out.println("当前是绿色的圆,半径是:" + radius + " 坐标:x=" + x + ", y=" + y);
    }
}

Shape.java

package cn.geoaryblog.design.cretedg.bridge;

public abstract class Shape {
    protected DrawAPI drawAPI;

    protected Shape(DrawAPI drawAPI){
        this.drawAPI = drawAPI;
    }

    public abstract void draw();
}

Cicle.java

package cn.geoaryblog.design.cretedg.bridge;

public class Cicle extends Shape {

    private int radius;
    private int x;
    private int y;

    protected Cicle(int radius, int x, int y, DrawAPI drawAPI) {
        super(drawAPI);
        this.radius = radius;
        this.x = x;
        this.y = y;
    }

    @Override
    public void draw() {
        drawAPI.drawCircle(radius, x, y);
    }
}

Client.java

package cn.geoaryblog.design.cretedg.bridge;

public class Client {
    public static void main(String[] args) {
        Shape redCicle = new Cicle(10, 10, 20, new RedCircle());
        Shape greenCicle = new Cicle(10, 0, 20, new GreenCircle());
        redCicle.draw();
        greenCicle.draw();
    }
}
// 输出结果
// 当前是红色的圆,半径是:10 坐标:x=10, y=20
// 当前是绿色的圆,半径是:10 坐标:x=0, y=20
posted @   Geoary  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示