当前位置:   article > 正文

2.2设计模式——Bridge 桥接模式(结构型)

2.2设计模式——Bridge 桥接模式(结构型)

意图

将抽象部分与其显示部分分离,使他们都可以独立地变化。

结构

其中:

  • Abstraction定义抽象类的接口,维护一个指向Implementer类型对象的指针。
  • RefinedAbstraction扩展由Abstraction定义的接口。
  • Implementor定义实现类的接口,该接口不一定要与Abstraction的接口完全一致;事实上这两个接口可以完全不同,一般来说,Implementor接口仅提供基本操作,而Abstraction定义了基于这些基本操作的较高层次的操作。
  • ConcreteImplementor实现Implementor接口并定义他的具体实现

适用性

  • 不希望在抽象和它的实现部分之间有一个固定的绑定关系。例如,这种情况可能是因为,在程序运行时刻实现部分应可以被选择或者切换。
  • 累的抽象以及他的实现都有该可以通过生成子类的方法来加以扩充。这是Bridge模式使得开发者可以对不同的抽象接口和实现部分进行组合,并分别对它们进行扩充。
  • 对一个抽象的实现部分的修改应对客户不产生影响,即客户代码不必重新编译,(C++)相对客户完全隐藏抽象的实现部分。
  • 许多类需要生成的层次结构。
  • 想在多个对象间共享实现(可能使用引用计数),但同时要求客户并不知道这一点。

代码示例

桥接设计模式是一种结构型设计模式,它将抽象部分与实现部分分离,从而使两者可以独立变化。

假设我们有一个 Shape 抽象类,它定义了形状的基本操作。我们还有两个实现类 Circle 和 Square,它们提供了具体形状的实现。

我们希望能够在不修改 Shape 抽象类的情况下向系统添加新的形状。

  1. // 抽象形状类
  2. abstract class Shape {
  3. protected DrawAPI drawAPI;
  4. protected Shape(DrawAPI drawAPI) {
  5. this.drawAPI = drawAPI;
  6. }
  7. public abstract void draw();
  8. }
  9. // 圆形类
  10. class Circle extends Shape {
  11. public Circle(DrawAPI drawAPI) {
  12. super(drawAPI);
  13. }
  14. @Override
  15. public void draw() {
  16. drawAPI.drawCircle();
  17. }
  18. }
  19. // 正方形类
  20. class Square extends Shape {
  21. public Square(DrawAPI drawAPI) {
  22. super(drawAPI);
  23. }
  24. @Override
  25. public void draw() {
  26. drawAPI.drawSquare();
  27. }
  28. }
  29. // 绘制 API 接口
  30. interface DrawAPI {
  31. void drawCircle();
  32. void drawSquare();
  33. }
  34. // 红色绘制 API 实现
  35. class RedDrawAPI implements DrawAPI {
  36. @Override
  37. public void drawCircle() {
  38. System.out.println("使用红色绘制圆形");
  39. }
  40. @Override
  41. public void drawSquare() {
  42. System.out.println("使用红色绘制正方形");
  43. }
  44. }
  45. // 绿色绘制 API 实现
  46. class GreenDrawAPI implements DrawAPI {
  47. @Override
  48. public void drawCircle() {
  49. System.out.println("使用绿色绘制圆形");
  50. }
  51. @Override
  52. public void drawSquare() {
  53. System.out.println("使用绿色绘制正方形");
  54. }
  55. }
  56. // 客户端代码
  57. public class Client {
  58. public static void main(String[] args) {
  59. DrawAPI redDrawAPI = new RedDrawAPI();
  60. DrawAPI greenDrawAPI = new GreenDrawAPI();
  61. Shape redCircle = new Circle(redDrawAPI);
  62. Shape greenSquare = new Square(greenDrawAPI);
  63. redCircle.draw();
  64. greenSquare.draw();
  65. }
  66. }
  • Shape 是一个抽象类,定义了形状的基本操作。
  • Circle 和 Square 是实现类,它们提供了具体形状的实现。
  • DrawAPI 是一个接口,定义了绘制形状所需的接口。
  • RedDrawAPI 和 GreenDrawAPI 是 DrawAPI 接口的实现,它们提供了使用不同颜色的绘制功能。
  • 客户端代码通过将 Shape 对象与 DrawAPI 对象关联来创建不同的形状和颜色组合。

桥接模式将抽象部分(Shape)与实现部分(DrawAPI)分离,从而使两者可以独立变化。我们可以轻松地添加新的形状或绘制 API 实现,而无需修改其他部分。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/568972
推荐阅读
相关标签
  

闽ICP备14008679号