java设计模式之桥接模式
桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。
感觉听完上面的描述,没有几个人能够描述桥接模式到达怎么实现。
据我个人的理解,桥接模式一般用于适用于以下情况,某个类的子类都多个维度的变化,如果都分别实现,可能会造成子类的爆炸。
可以把这种多角度分类分离出来,让它们独立变化,减少它们之间耦合。
下面通过画笔这个例子,来解读一下桥接模式。
photoshop很多人都用过,画笔既可以用来画圆,也可以画方,既可以画红色,也可以画蓝色。
假如形状有10种,颜色有10种,分别实现就会有10*10=100个子类,关键是还不止形状和颜色两个维度,如果再加上线条粗细,背景色等维度就真的太繁琐了。
我们将形状Shape和颜色Color解耦合,分别实现
public abstract class Color { @Override public String toString() { return this.getClass().getSimpleName(); } } public class BlueColor extends Color{ } public class GreenColor extends Color{ } public class RedColor extends Color{ }
在实现一个Shape类,持有一个颜色Color属性
public abstract class Shape { private Color color; public void setColor(Color color) { this.color = color; } public Color getColor() { return color; } abstract void draw(); } //正方形 public class Square extends Shape{ @Override void draw() { System.out.println(getColor()+" "+this.getClass().getSimpleName()); } } //圆形 public class Circle extends Shape{ @Override void draw() { System.out.println(getColor()+" "+this.getClass().getSimpleName()); } } //长方形 public class Rectangle extends Shape{ @Override void draw() { System.out.println(getColor()+" "+this.getClass().getSimpleName()); } }
这样就可以让形状和颜色分别实现
public class PaintBoard { public static void main(String[] args) { BlueColor blueColor = new BlueColor(); Square square = new Square(); square.setColor(blueColor); square.draw(); } } //输出 BlueColor Square
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?