Java设计模式-桥接模式(9)

简介: Java设计模式-桥接模式(9)

大家好,我是馆长!今天开始我们讲的是结构型模式中的桥接模式。老规矩,讲解之前再次熟悉下结构型模式包含:代理模式、适配器模式、桥接模式、装饰模式、外观模式、享元模式、组合模式,共7种设计模式。

桥接模式(Bridge Pattern)

定义

桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(interface)模式。

解决问题

在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用Bridge模式。

实现

可以将抽象化部分与实现化部分分开,取消二者的继承关系,改用组合关系。

结构

主要角色如下:

1.抽象化(Abstraction)角色:定义抽象类,并包含一个对实现化对象的引用。

2.扩展抽象化(Refined Abstraction)角色:是抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色中的业务方法。可以是抽象类的子类或具体实现类。

3.实现化(Implementor)角色:定义实现化角色的接口,供扩展抽象化角色调用。

4.具体实现化(Concrete Implementor)角色:给出实现化角色接口的具体实现。

注意:

1、抽象化角色是抽象类(abstract class),包含实现化引用。

2、对于两个独立变化的维度或者多维度的变化,使用桥接模式再适合不过了。

优点:

由于抽象与实现分离,所以扩展能力强。

其实现细节对客户透明。

缺点:

由于聚合关系建立在抽象层,要求开发者针对抽象化进行设计与编程,这增加了系统的理解与设计难度。

适用场景:

1、当一个类存在两个独立变化的维度,且这两个维度都需要进行扩展时。

2、当一个系统不希望使用继承或因为多层次继承导致系统类的个数急剧增加时。

3、当一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性时。

代码实现:

//抽象化角色:Shape
@Data
public abstract class Shape {
protected Color color;

Shape() {}

Shape(Color color) {
    this.color = color;
}

//绘制图形
abstract void draw();

}
//扩展抽象化角色:Circular
@Data
public class Circular extends Shape {

Circular(Color color) {
    super(color);
}

@Override
void draw() {
    System.out.println("绘制圆形:");
    color.fill();
}

}

​​​​​​
//扩展抽象化角色:Circular
@Data
public class Rectangle extends Shape {

Rectangle(Color color) {
    super(color);
}

@Override
public void draw() {
    System.out.println("绘制矩形:");
    color.fill();
}

}

​​​​​​
//实现抽象类:颜色填充 Color
public interface Color {
void fill();
}

​​​​​​
//具体实现化角色:RedColor
@Data
public class RedColor implements Color {
@Override
public void fill() {
System.out.println("填充了红色");
}
}

//具体实现化角色:RedColor
@Data
public class BlueColor implements Color {
@Override
public void fill() {
System.out.println("填充了蓝色");
}
}

//模拟客户端
public class ClientDemo {
public static void main(String[] args) {
Shape circularRed = new Circular(new RedColor());
circularRed.draw();
Shape circularBlue = new Circular(new BlueColor());
circularBlue.draw();
Shape rectangleRed = new Rectangle(new RedColor());
rectangleRed.draw();
Shape rectangleBlue = new Rectangle(new BlueColor());
rectangleBlue.draw();
}
}
扩展:

在软件开发中,有时桥接(Bridge)模式可与适配器模式联合使用。当桥接(Bridge)模式的实现化角色的接口与现有类的接口不一致时,可以在二者中间定义一个适配器将二者连接起来,

好了,关于桥接模式的说明,馆长就先讲到这里。谢谢各位看官!!

23 种设计模式不是孤立存在的,很多模式之间存在一定的关联关系,在大的系统开发中常常同时使用多种设计模式,或者模式与模式之间的组合进行生成更加强大的程序功能。

相关文章
|
8月前
|
设计模式 网络协议 数据可视化
Java 设计模式之状态模式:让对象的行为随状态优雅变化
状态模式通过封装对象的状态,使行为随状态变化而改变。以订单为例,将待支付、已支付等状态独立成类,消除冗长条件判断,提升代码可维护性与扩展性,适用于状态多、转换复杂的场景。
1015 157
|
8月前
|
设计模式 Java Spring
Java 设计模式之责任链模式:优雅处理请求的艺术
责任链模式通过构建处理者链,使请求沿链传递直至被处理,实现发送者与接收者的解耦。适用于审批流程、日志处理等多级处理场景,提升系统灵活性与可扩展性。
845 2
|
10月前
|
设计模式 缓存 Java
Java设计模式(二):观察者模式与装饰器模式
本文深入讲解观察者模式与装饰器模式的核心概念及实现方式,涵盖从基础理论到实战应用的全面内容。观察者模式实现对象间松耦合通信,适用于事件通知机制;装饰器模式通过组合方式动态扩展对象功能,避免子类爆炸。文章通过Java示例展示两者在GUI、IO流、Web中间件等场景的应用,并提供常见陷阱与面试高频问题解析,助你写出灵活、可维护的代码。
|
8月前
|
设计模式 算法 搜索推荐
Java 设计模式之策略模式:灵活切换算法的艺术
策略模式通过封装不同算法并实现灵活切换,将算法与使用解耦。以支付为例,微信、支付宝等支付方式作为独立策略,购物车根据选择调用对应支付逻辑,提升代码可维护性与扩展性,避免冗长条件判断,符合开闭原则。
2171 35
|
8月前
|
设计模式 消息中间件 传感器
Java 设计模式之观察者模式:构建松耦合的事件响应系统
观察者模式是Java中常用的行为型设计模式,用于构建松耦合的事件响应系统。当一个对象状态改变时,所有依赖它的观察者将自动收到通知并更新。该模式通过抽象耦合实现发布-订阅机制,广泛应用于GUI事件处理、消息通知、数据监控等场景,具有良好的可扩展性和维护性。
606 8
|
设计模式 缓存 安全
【高薪程序员必看】万字长文拆解Java并发编程!(8):设计模式-享元模式设计指南
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发编程中的经典对象复用设计模式-享元模式,废话不多说让我们直接开始。
257 0
|
10月前
|
设计模式 安全 Java
Java设计模式(一):单例模式与工厂模式
本文详解单例模式与工厂模式的核心实现及应用,涵盖饿汉式、懒汉式、双重检查锁、工厂方法、抽象工厂等设计模式,并结合数据库连接池与支付系统实战案例,助你掌握设计模式精髓,提升代码专业性与可维护性。
|
10月前
|
设计模式 XML 安全
Java枚举(Enum)与设计模式应用
Java枚举不仅是类型安全的常量,还具备面向对象能力,可添加属性与方法,实现接口。通过枚举能优雅实现单例、策略、状态等设计模式,具备线程安全、序列化安全等特性,是编写高效、安全代码的利器。
|
关系型数据库 Java MySQL
【设计模式】【结构型模式】桥接模式(Bridge)
一、入门 什么是桥接模式? 桥接模式(Bridge Pattern)是一种结构型设计模式,核心思想是将抽象与实现分离,让它们可以独立变化。简单来说,它像一座“桥”连接了两个维度的变化,避免用继承导致代
577 10
|
设计模式 Java 数据安全/隐私保护
Java 设计模式:装饰者模式(Decorator Pattern)
装饰者模式属于结构型设计模式,允许通过动态包装对象的方式为对象添加新功能,提供比继承更灵活的扩展方式。该模式通过组合替代继承,遵循开闭原则(对扩展开放,对修改关闭)。