首页 > 编程语言 >Java设计模式 —— 桥接模式

Java设计模式 —— 桥接模式

时间:2022-10-08 14:22:51浏览次数:65  
标签:Java 桥接 void 模式 Implement 设计模式 public impl

8 桥接模式

8.1 桥接模式概述

Bridge Pattern: 将抽象部分与它的实现部分解耦,使得两者都能够独立变化。

桥接模式是一种很实用的结构型模式,如果系统中某个类存在两个独立变化的维度,通过桥接模式将这两个维度分离出来,使两者可以独立扩展。

桥接模式结构图如下所示:

8.2 桥接模式实现

8.2.1 抽象类

它通常是抽象类,而不是接口,其中定义了一个实现类接口的对象并维护该对象。

public abstract class Abstraction {
  private Implement impl;
  
  public void setImplement(Implement impl) {
    this.impl = impl;
  }
  
  public void operation();
}

8.2.2 具体类

public class Concrete extends Abstraction {
  // 实现父类的抽象方法
  public void operation() {
    impl.operationImpl();
  }
}

8.2.3 实现类接口

public interface Implement {
  public void operationImpl();
}

8.2.4 具体实现类

它实现了 Implement 接口,在不同的 ConcreteImplement 中提供操作的不同实现。

public class ConcreteImplementA implements Implement {
  public void operationImpl() {
    // 具体业务逻辑实现 A
  }
}


public class ConcreteImplementB implements Implement {
  public void operationImpl() {
    // 具体业务逻辑实现 B
  }
}

8.2.5 客户端调用类

public class Client {
  public static void main(String[] args) {
    Abstraction abs = new ConcreteA();
    Implement impl = new ImplementA();
    
    abs.setImplment(impl);
    abs.operation();
  }
}

8.3 结合具体例子理解桥接模式

可能光看上面对桥接模式的理论有点难以理解,下面我门结合具体的例子来解释桥接模式做了什么,这么做的优势在哪里。

例子说明:

某软件系统要求能够显示 JPG、GIF、PNG 等多种格式图片,且能够在 Windows、Linux 等多个操作系统上运行。系统首先将各种格式文件转换为像素矩阵,在不同的操作系统中调用不同的绘制函数来绘制像素矩阵。系统需要较好的扩展性,以便在将来支持更多的图片格式和操作系统。

这个例子就将图片格式与操作系统这两个独立变化的维度分离。如果这两个成员变量都耦合在一个类中,那么要实现上述的扩展则需要 3 * 2 = 6 个子类来实现,而分离出来独立变化则只需要 3 + 2 = 5 个额外的类,当然变化的维度越多,桥接模式的效果则越显著。

8.4 桥接模式优/缺点

桥接模式的优点主要如下:

  • 分离抽象接口与其实现部分,使得抽象部分和实现部分可以沿着各自的维度变化
  • 桥接模式可以取代多层继承方案,极大地减少子类的个数
  • 桥接模式提高了系统的扩展性,增加/删除都不需要修改原有代码,符合开闭原则

桥接模式的缺点主要如下:

  • 增加系统的理解与设计难度,因为关联关系建立在抽象层,要求一开始就针对抽象层进行设计

标签:Java,桥接,void,模式,Implement,设计模式,public,impl
From: https://www.cnblogs.com/ylyzty/p/16768790.html

相关文章

  • Java_多线程
    Java_多线程1.实现多线程1.1进程和线程【理解】进程:是正在运行的程序是系统进行资源分配和调用的独立单位每一个进程都有它自己的内存空间和系统资源线程:是进程......
  • Java_网络编程
    Java_网络编程1.网络编程入门1.1网络编程概述【理解】计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网......
  • Java_Lambda&方法引用
    Java_Lambda&方法引用1.Lambda表达式1.1体验Lambda表达式【理解】案例需求启动一个线程,在控制台输出一句话:多线程程序启动了实现方式一实现步骤定义一个类MyR......
  • Java_函数式接口&Stream流
    Java_函数式接口&Stream流1.函数式接口1.1函数式接口概述【理解】概念有且仅有一个抽象方法的接口如何检测一个接口是不是函数式接口@FunctionalInterface放在......
  • 情人节程序员用HTML网页表白【粉红爱心表白】 HTML5七夕情人节表白网页源码 HTML+CSS+
    ......
  • DIV+CSS+JavaScript技术制作网页(旅游主题网页设计与制作)云南大理
    ......
  • Java_字节缓冲流&字符流
    Java_字节缓冲流&字符流1.字节缓冲流1.1字节缓冲流构造方法【应用】字节缓冲流介绍lBufferOutputStream:该类实现缓冲输出流。通过设置这样的输出流,应用程序可以向......
  • java--基本类型值传递,和引用类型String,数组的区别
    //java语言:值传递//数据类型:基本类型:4种8类,参数传递:值传递//引用类型:String数组等,传递的是内存地址值,但String值不会改变,相当于常量池的数据重新给它赋值//参数类......
  • Java_内部类&API
    Java_内部类&API1.参数传递1.1类名作为形参和返回值(应用)1、类名作为方法的形参方法的形参是类名,其实需要的是该类的对象实际传递的是该对象的【地址值】2、类......
  • Java_常用API&异常
    Java_常用API&异常1.包装类1.1基本类型包装类(记忆)基本类型包装类的作用将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据常用的操作之......