桥接设计模式
- 一. 介绍
- 二. 桥接模式示例
- 2.1 定义实现部分和具体实现
- 2.2 定义抽象部分和细化抽象部分
- 2.3 测试
- 2.4 解释
- 三. 结论
前言
这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。
作者:神的孩子都在歌唱
一. 介绍
百度百科: 桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(interface)模式。
说实话,一开始我没法理解百度百科这句话,所以我找了几个案例文章学习,那么,我就拿最经常看到的 绘制不同颜色的形状 这个案例去理解吧。
以下是网上看到的案例
注意:以下的案例是反例
现在有一个需求,需要创建不同的图形,并且每个图形都有可能会有不同的颜色。我们可以利用继承的方式来设计类的关系:
我们可以发现有很多的不同形状颜色的类,假如我们再增加一个形状或再增加一种颜色,就需要创建更多的类。
试想,在一个有多种可能会变化的维度的系统中,用继承方式会造成类爆炸,扩展起来不灵活。每次在一个维度上新增一个具体实现都要增加多个子类。为了更加灵活的设计系统。 我们此时可以考虑使用桥接模式, 将抽象与实现分离,使它们可以独立变化。。
个人理解:通过上面的反例,大概知道桥接模式具体要做什么了,它的理念其实就是将要实现对象的类 (比如Shape类)进行抽象化,将颜色独立出来实现(比如 black,white颜色),使得抽象部分(Shape)和实现部分(color)可以独立地扩展和变化,实现解耦。
作用是了解了,但是为啥叫桥接模式呢?是不是我没理解透,这个取名有啥含义,有知道的大佬补充一下
二. 桥接模式示例
概念理解了,那么我们看看代码如何实现吧,假设我们需要绘制不同颜色的形状,使用桥接模式将形状和颜色解耦。
2.1 定义实现部分和具体实现
color接口
/**
* @author chenyunzhi
* @date 2024/5/31 16:37
* @Description 定义颜色的接口
*/
public interface Color {
/**
* 应用颜色
*/
void applyColor();
}
BlackColor类
/**
* @author chenyunzhi
* @date 2024/5/31 17:01
* @Description 黑色
*/
public class BlackColor implements Color{
@Override
public void applyColor() {
System.out.println("黑色");
}
}
WhiteColor类
/**
* @author chenyunzhi
* @date 2024/5/31 16:59
* @Description 白色
*/
public class WhiteColor implements Color{
@Override
public void applyColor() {
System.out.println("白色");
}
}
2.2 定义抽象部分和细化抽象部分
shape类
/**
* @author chenyunzhi
* @date 2024/5/31 17:02
* @Description 定义形状的抽象接口
*/
abstract class Shape {
protected Color color;
public Shape(Color color) {
this.color = color;
}
// 定义抽象画图方法
abstract void draw();
}
Circle类
/**
* @author chenyunzhi
* @date 2024/5/31 17:07
* @Description 圆形
*/
public class CircleShape extends Shape{
public CircleShape(Color color) {
super(color);
}
@Override
void draw() {
System.out.print("获得圆形的颜色是");
color.applyColor();
}
}
Rectangle类
/**
* @author chenyunzhi
* @date 2024/5/31 17:13
* @Description 长方形
*/
public class RectangleShape extends Shape{
public RectangleShape(Color color) {
super(color);
}
@Override
void draw() {
System.out.print("获得长方形颜色是");
color.applyColor();
}
}
2.3 测试
/**
* @author chenyunzhi
* @date 2024/5/31 17:15
* @Description
*/
public class BridgePatterTest {
public static void main(String[] args) {
CircleShape circleShape = new CircleShape(new BlackColor());
circleShape.draw();
RectangleShape rectangleShape = new RectangleShape(new WhiteColor());
rectangleShape.draw();
}
}
结果如下
2.4 解释
- 实现部分(Implementor):
Color
接口及其具体实现RedColor
和GreenColor
,定义了颜色的应用方式。 - 抽象部分(Abstraction):
Shape
抽象类,包含一个对Color
接口的引用,并定义了一个抽象的draw
方法。 - 细化抽象部分(Refined Abstraction):
Circle
和Rectangle
类,具体实现了Shape
抽象类中的draw
方法,调用color.applyColor()
来应用颜色。
三. 结论
- 当抽象和实现都可以独立地具有不同的层次结构并且我们希望对客户端应用程序隐藏实现时,可以使用桥接设计模式。
- 桥接模式中的抽象部分主要是定义了对象的高层行为和属性,通过引用实现部分的接口,使得抽象部分和实现部分可以独立地扩展和变化。这样就实现了系统的解耦,提高了代码的灵活性和可维护性。
作者:神的孩子都在歌唱
本人博客:https://blog.csdn.net/weixin_46654114
转载说明:务必注明来源,附带本人博客连接。