当前位置: 首页 > article >正文

设计模式-结构型模式之桥接设计模式

文章目录

    • 三、桥接模式

三、桥接模式

桥接模式(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦
这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。
优点:

  1. 抽象和实现的分离。
  2. 优秀的扩展能力。
  3. 实现细节对客户透明。

举个例子:绘画不同颜色的各种图像,画不同的形状和涂颜色,便是两个不同的功能,但两者又相互联系,在画完形状后需要涂颜色,但颜色和形状有使多种多样的,此时就可以采用桥接设计模式,将两者的抽象化与实现化解耦,形状和颜色可以独立变化

下面使用程序演示下上面的例子:

  1. 定义颜色的接口
public interface ColorApi {
   public void drawCircle();
}
  1. 定义不同颜色的实现,这里采用红色和绿色
public class ReqColor implements ColorApi {
    @Override
    public void drawCircle() {
        System.out.println("开始涂红色!");
    }
}
public class GreenColor implements ColorApi {
   @Override
   public void drawCircle() {
      System.out.println("开始涂绿色!");
   }
}
  1. 定义形状的接口
public interface ShapeApi {
    //画形状
    void draw();
    //画形状并涂颜色
    void drawShapeAndsColor();
}
  1. 定义形状的抽象模板,将共性的操作定义到抽象中
public abstract class ShapeAbstract implements ShapeApi {

    public ColorApi colorApi;

    public ShapeAbstract(ColorApi colorApi) {
        this.colorApi = colorApi;
    }

    @Override
    public void drawShapeAndsColor() {
        draw();
        colorApi.drawCircle();
    }
}
  1. 定义圆形的实例
public class Circle extends ShapeAbstract {

   public Circle(ColorApi colorApi) {
      super(colorApi);
   }
 
   @Override
   public void draw() {
      System.out.println("开始画圆形!");
   }
}
  1. 定义矩形的实例
public class Rectangle extends ShapeAbstract {

    public Rectangle(ColorApi colorApi) {
        super(colorApi);
    }

    @Override
    public void draw() {
        System.out.println("开始画矩形");
    }
}
  1. 演示
public class demo {
   public static void main(String[] args) {
      ShapeApi shapeReq = new Circle(new ReqColor());
      shapeReq.drawShapeAndsColor();

      ShapeApi shapeGreen = new Circle(new GreenColor());
      shapeGreen.drawShapeAndsColor();

      ShapeApi rectangle = new Rectangle(new GreenColor());
      rectangle.drawShapeAndsColor();
   }
}

在这里插入图片描述

上面可以看出,可以灵活的定义形状和颜色的组合,并且他们两个都可以独立变化,添加新的形状只需,建立新的类并实现形状接口,添加颜色也是如此,极大的提高的系统的可扩展性和可维护型。


http://www.kler.cn/a/153217.html

相关文章:

  • Android 12.0 Launcher3定制化之folder文件夹去掉背景功能实现
  • 【MATLAB源码-第93期】基于matlab的白鲸优化算法(BWO)和鲸鱼优化算法(WOA)机器人栅格路径规划对比。
  • 一种LED驱动专用控制电路方案
  • C语言面试之旅:掌握基础,探索深度(面试实战之c语言内存下篇)
  • mysql学习记录
  • VR全景对旅游业有什么帮助,如何助力旅游业实现新的旅游形式
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • Kubernetes 使用插件扩展 kubectl
  • 函数声明后的“ - >”是什么?
  • 到底什么是yocto(yocto是什么)
  • Non-local KDE 如何应对类似于AIS的数据?
  • nodejs+vue+elementui网上家电家用电器数码商城购物网站 多商家
  • 【Android面试|华为|广播类】-Local Broaddcasts 能接收到系统广播么?
  • MySQL的系统信息函数
  • springboot+vue志愿者在线报名服务管理系统java毕业设计源码+数据库
  • MAMP Pro v6.8.1(PHP/MySQL开发环境)
  • Linux git
  • MySQL的数学函数
  • Unity | 渡鸦避难所-0 | 创建 URP 项目并导入商店资源
  • 目标检测VOC生成txt文件