类型:结构型模式
实现原理:将抽象类和实现类分离,使其独立,然后使用接口再将二者连接起来。
意图:将抽象部分与实现部分分离,使它们都可以独立的变化。
主要解决:类变化频繁时用继承可能会出现的类爆炸问题。
如何解决:减少类的耦合关系,让类独立变化。
应用实例: 汽车制造,抽象部分可以是车辆的基本属性和功能,而实现部分可以是具体型号的引擎,通过桥接模式,我们可以在不同型号的汽车上组合不同类型的引擎
优点: 1、优秀的解耦性 2、优秀的扩展性
缺点:会提高系统的设计与认知难度
使用场景:一个类存在多个独立变化的维度
关键角色文章来源:https://www.toymoban.com/news/detail-659336.html
- 抽象(Abstraction):定义抽象接口,通常包含对实现接口的引用。
- 扩展抽象(Refined Abstraction):对抽象的扩展,可以是抽象类的子类或具体实现类。
- 实现(Implementor):定义实现接口,提供基本操作的接口。
- 具体实现(Concrete Implementor):实现实现接口的具体类。
实现
步骤1:
首先,我们定义了一个接口 DrawAPI,其中包含了绘制圆形的方法 drawCircle。
public interface DrawAPI {
public void drawCircle(int radius, int x, int y);
}
步骤 2:
然后,我们创建了两个实现了 DrawAPI 接口的具体桥接实现类:RedCircle 和 GreenCircle。这两个类分别用于绘制红色和绿色的圆形。
public class RedCircle implements DrawAPI {
@Override
public void drawCircle(int radius, int x, int y) {
System.out.println("Drawing Circle[ color: red, radius: "
+ radius +", x: " +x+", "+ y +"]");
}
}
public class GreenCircle implements DrawAPI {
@Override
public void drawCircle(int radius, int x, int y) {
System.out.println("Drawing Circle[ color: green, radius: "
+ radius +", x: " +x+", "+ y +"]");
}
}
步骤 3
我们创建了一个抽象类 Shape,其中包含一个成员变量 drawAPI,它的类型是 DrawAPI 接口。这个抽象类还有一个抽象方法 draw()。
public abstract class Shape {
protected DrawAPI drawAPI;
protected Shape(DrawAPI drawAPI){
this.drawAPI = drawAPI;
}
public abstract void draw();
}
步骤 4
最后,我们创建了一个实体类 Circle,它继承了 Shape 抽象类。Circle 类有自己的属性(x、y、radius)和一个带有参数的构造函数。在 draw() 方法中,它调用了 drawAPI 的 drawCircle 方法来绘制圆形。
public class Circle extends Shape {
private int x, y, radius;
public Circle(int x, int y, int radius, DrawAPI drawAPI) {
super(drawAPI);
this.x = x;
this.y = y;
this.radius = radius;
}
public void draw() {
drawAPI.drawCircle(radius,x,y);
}
}
步骤 5
在 BridgePatternDemo 类的 main 方法中,我们创建了一个红色的圆形和一个绿色的圆形,并通过调用 draw() 方法来绘制它们。这里的关键点是,我们可以通过传入不同的颜色类(即 RedCircle 和 GreenCircle)来实现不同颜色的圆形绘制,而无需修改 Shape 和 Circle 类的代码。
public class BridgePatternDemo {
public static void main(String[] args) {
Shape redCircle = new Circle(100,100, 10, new RedCircle());
Shape greenCircle = new Circle(100,100, 10, new GreenCircle());
redCircle.draw();
greenCircle.draw();
}
}
综上所述,桥接模式的作用是将抽象部分和实现部分解耦,使它们可以独立地变化。在这个例子中,我们通过桥接模式实现了不同颜色圆形的绘制,而且可以很方便地添加更多的颜色选项,同时保持代码的灵活性和可扩展性。文章来源地址https://www.toymoban.com/news/detail-659336.html
到了这里,关于设计模式详解-桥接模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!