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

相关文章
|
2月前
|
设计模式 Java 程序员
[Java]23种设计模式
本文介绍了设计模式的概念及其七大原则,强调了设计模式在提高代码重用性、可读性、可扩展性和可靠性方面的作用。文章还简要概述了23种设计模式,并提供了进一步学习的资源链接。
47 0
[Java]23种设计模式
|
2月前
|
设计模式 PHP 开发者
PHP中的设计模式:桥接模式的解析与应用
在软件开发的浩瀚海洋中,设计模式如同灯塔一般,为开发者们指引方向。本文将深入探讨PHP中的一种重要设计模式——桥接模式。桥接模式巧妙地将抽象与实现分离,通过封装一个抽象的接口,使得实现和抽象可以独立变化。本文将阐述桥接模式的定义、结构、优缺点及其应用场景,并通过具体的PHP示例代码展示如何在实际项目中灵活运用这一设计模式。让我们一起走进桥接模式的世界,感受它的魅力所在。
|
20天前
|
设计模式 JavaScript Java
Java设计模式:建造者模式详解
建造者模式是一种创建型设计模式,通过将复杂对象的构建过程与表示分离,使得相同的构建过程可以创建不同的表示。本文详细介绍了建造者模式的原理、背景、应用场景及实际Demo,帮助读者更好地理解和应用这一模式。
|
2月前
|
设计模式 监控 算法
Java设计模式梳理:行为型模式(策略,观察者等)
本文详细介绍了Java设计模式中的行为型模式,包括策略模式、观察者模式、责任链模式、模板方法模式和状态模式。通过具体示例代码,深入浅出地讲解了每种模式的应用场景与实现方式。例如,策略模式通过定义一系列算法让客户端在运行时选择所需算法;观察者模式则让多个观察者对象同时监听某一个主题对象,实现松耦合的消息传递机制。此外,还探讨了这些模式与实际开发中的联系,帮助读者更好地理解和应用设计模式,提升代码质量。
Java设计模式梳理:行为型模式(策略,观察者等)
|
3月前
|
存储 设计模式 安全
Java设计模式-备忘录模式(23)
Java设计模式-备忘录模式(23)
|
3月前
|
设计模式 存储 算法
Java设计模式-命令模式(16)
Java设计模式-命令模式(16)
|
3月前
|
设计模式 自然语言处理 算法
PHP中的设计模式:桥接模式的深入探索与应用
在PHP开发中,理解并运用设计模式是提升代码质量与可维护性的关键。本文聚焦于桥接模式——一种结构型设计模式,它通过封装一个抽象的接口,将实现与抽象分离,从而使得它们可以独立变化。不同于传统摘要的概述式表述,本文将以故事化的情境引入,逐步解析桥接模式的精髓,通过PHP代码示例详细展示其在实际项目中的应用,旨在为读者提供一个既深刻又易于理解的学习体验。
27 1
|
3月前
|
设计模式 存储 缓存
Java设计模式 - 解释器模式(24)
Java设计模式 - 解释器模式(24)
|
3月前
|
设计模式 安全 Java
Java设计模式-迭代器模式(21)
Java设计模式-迭代器模式(21)
|
3月前
|
设计模式 缓存 监控
Java设计模式-责任链模式(17)
Java设计模式-责任链模式(17)