Bridge Pattern

打印 上一主题 下一主题

主题 871|帖子 871|积分 2615

What is Bridge Pattern

桥接模式(Bridge Pattern),旨在将抽象部分和实现部分解耦,使它们可以独立地变化。该模式通过将抽象和实现分离,使它们可以独立地进行扩展和修改,同时通过桥接(Bridge)将它们连接起来。
将一个事物原本耦合在一起的东西,通过定义成抽象和实现两个维度,做到解耦,解耦就是为了能组成更多的组合
怎么划分抽象和现实?
在桥接模式中,抽象部分和实现部分是两个相对的概念,只是用于表示系统中的两个不同维度或变化的方向,谁是抽象、谁是具体并不是很重要,重要的是解耦出两个维度就行。

  • 抽象部分(Abstraction)
    表示高层的抽象接口或类,它定义了对外的接口方法和抽象操作,描述了一个对象的行为和功能。抽象部分关注的是系统的功能、行为和逻辑。
  • 实现部分(Implementation)
    表示底层的具体实现接口或类,它实现了抽象部分所定义的接口或类,并提供了具体的功能实现。实现部分关注的是系统的实现细节、数据存储、算法等底层的技术细节。
通常情况下,抽象部分和实现部分都是通过接口或抽象类来定义的。抽象部分定义了高层的抽象接口或类,其中包含了对实现部分的引用(可以是实现部分的接口类型),以及定义了高层的操作和功能方法。实现部分则实现了抽象部分定义的接口或类,提供了具体的功能实现。
Example

好的,下面是一个用 Java 代码举例说明桥接模式的示例:
首先,我们考虑一个图形绘制的场景,其中有多种不同的图形(如圆形、矩形)和多种不同的颜色(如红色、蓝色)。我们将使用桥接模式来实现图形和颜色的解耦。
定义抽象
  1. // 定义抽象部分的接口 Shape,其中声明了绘制图形的抽象方法
  2. public interface Shape {
  3.     void draw();
  4. }
  5. // 定义实现部分的接口 Color,其中声明了填充颜色的抽象方法
  6. public interface Color {
  7.     void fill();
  8. }
  9. //接着,实现具体的图形类,例如 Circle 和 Rectangle:
  10. public class Circle implements Shape {
  11.     private Color color;
  12.     public Circle(Color color) {
  13.         this.color = color;
  14.     }
  15.     public void draw() {
  16.         System.out.print("绘制圆形,");
  17.         color.fill();
  18.     }
  19. }
  20. public class Rectangle implements Shape {
  21.     private Color color;
  22.     public Rectangle(Color color) {
  23.         this.color = color;
  24.     }
  25.     public void draw() {
  26.         System.out.print("绘制矩形,");
  27.         color.fill();
  28.     }
  29. }
复制代码
具体的颜色类,例如 RedColor 和 BlueColor:
  1. public class RedColor implements Color {
  2.     public void fill() {
  3.         System.out.println("填充红色");
  4.     }
  5. }
  6. public class BlueColor implements Color {
  7.     public void fill() {
  8.         System.out.println("填充蓝色");
  9.     }
  10. }
复制代码
最后,在客户端代码中使用桥接模式来绘制图形:
  1. public class Client {
  2.     public static void main(String[] args) {
  3.         Shape circle = new Circle(new RedColor());
  4.         circle.draw();
  5.         Shape rectangle = new Rectangle(new BlueColor());
  6.         rectangle.draw();
  7.     }
  8. }
复制代码
out
  1. 绘制圆形,填充红色
  2. 绘制矩形,填充蓝色
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

tsx81428

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表