小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。
概述
桥接模式,是结构型设计模式的一种,其作用是可将一个大类或者一系列紧密相关的类拆分为抽象和实现两个独立的层次结构,从而能在开发时分别使用。
角色
抽象化:抽象化的给出定义,并保存一个堆实现化对象的引用。
实现化:给出实现化的接口,但不给出具体的实现。
精确抽象:扩展抽象化,引用实现化对象并对抽象化对象进行补充。
具体实现:对实现化接口中的方法进行具体实现。
模板
抽象化:图形抽象类,引用了一个实例化对象,定义了一个画图的方法。
public abstract class AbstractShape {
Color color;
public AbstractShape(Color color) {
this.color = color;
}
public abstract void draw();
}
复制代码
实现化:定义了一个获取颜色的接口。
public interface Color {
String getColor();
}
复制代码
精确抽象:定义了圆形和方形两个继承抽象化的类,精确了draw()
方法的实现逻辑。
public class Circle extends AbstractShape{
public Circle(Color color) {
super(color);
}
@Override
public void draw() {
System.out.println("使用" + color.getColor() + "画圆形");
}
}
复制代码
public class Square extends AbstractShape{
public Square(Color color) {
super(color);
}
@Override
public void draw() {
System.out.println("使用" + color.getColor() + "画正方形");
}
}
复制代码
具体实现:定义了红色跟绿色两个实现了颜色接口的类,通过getColor()
方法给出了具体的颜色。
public class Green implements Color{
@Override
public String getColor() {
return "绿色";
}
}
复制代码
public class Red implements Color{
@Override
public String getColor() {
return "红色";
}
}
复制代码
客户端:不同形状与不同颜色的自由组合实现。
public class BridgePattern {
public static void main(String[] args) {
// 创建一个绿色的对象
Color color = new Green();
// 创建一个方形,初始化颜色为绿色
AbstractShape shape = new Square(color);
// 使用绿色画正方形
shape.draw();
// 将图形改为圆形
shape = new Circle(color);
// 使用绿色画圆形
shape.draw();
// 将颜色改为红色
color = new Red();
// 图形改为方形
shape = new Square(color);
// 使用红色画正方形
shape.draw();
// 图形改为圆形
shape = new Circle(color);
// 使用红色画圆形
shape.draw();
}
}
复制代码
小结
优点
开闭原则:抽象和实现分离,可以不受抽象的约束,不用绑定在一个固定的抽象层次上,他们直接不会相互影响。
高透明度:客户端不用关心实现细节,仅与抽象部分进行交互,不会接触到别的详细信息。
单一职责:抽象部分专注于高层逻辑,实现部分处理细节。
缺点
复杂度提升:对高内聚的累使用该模式可能会导致代码更加复杂。
适用场景
- 具有多重功能的庞杂类需要拆分或重组时可以使用桥接模式。
- 需要在多个抽相化和实现化直接进行动态耦合,切换不同实现方式时可以使用桥接模式。
- 希望在多个独立维度上扩展一个类的时候可以使用桥接模式。
最后
文章有写的不好的地方,请大佬们不吝赐教,错误是最能让人成长的,愿我与大佬间的距离逐渐缩短!!!
如果觉得文章对你有帮助,请 点赞、收藏、关注、评论 一键四连支持,你的支持就是我创作最大的动力!!!