桥梁模式练习:飞机信息系统(JAVA练习项目&IDEA)

简介: 桥梁模式是对象的结构模式。又称为柄体(Handle and Body)模式或接口(Interface)模式。桥梁模式的用意是“将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者独立的变化”。桥梁模式的用意是“将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者独立的变化”。这句话很短,这句话有三个关键词,也就是抽象化、实现化和脱耦。理解这三个词所代表的概念是理解桥梁模式用意的关键。桥梁模式在Java应用中一个非常典型的例子就是JDBC

 目录

前言

一、了解桥梁模式

1.桥梁模式的用意

2.桥梁模式的优点

3.桥梁模式在Java中的使用

二、桥梁模式的例子(飞机信息系统)

抽象类代码Airplane

修正抽象类代码

实现类代码

具体实现类代码

测试程序

运行结果

总结


前言

桥梁模式是对象的结构模式。又称为柄体(Handle and Body)模式或接口(Interface)模式。桥梁模式的用意是“将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者独立的变化”。


一、了解桥梁模式

1.桥梁模式的用意

桥梁模式的用意是“将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者独立的变化”。这句话很短,这句话有三个关键词,也就是抽象化实现化脱耦。理解这三个词所代表的概念是理解桥梁模式用意的关键。

    • 从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征,就是抽象化
    • 抽象化给出的具体实现,就是实现化。一个类的实例就是这个类的实例化,一个具体子类就是它的抽象超类的实例化。
    • 两个实体的行为的有某种强关联。将它们的强关联去掉,就是耦合的脱耦。在这里,脱耦是指将抽象化和实例化之间的耦合解脱开,或者是将它们之间的强关联改成弱关联。

    2.桥梁模式的优点

      • 分离抽象部分和实现部分
        桥梁模式分离了抽象部分和实现部分,从而极大的提高了系统的灵活性。让抽象部分和实现部分独立出来,分别定义接口,这有助于对系统进行分层,从而产生更好的结构化的系统。
      • 更好的扩展性
        桥梁模式使得抽象部分和实现部分可以分别独立的扩展,而不会相互影响,从而大大提高了系统的可扩展性

      3.桥梁模式在Java中的使用

      桥梁模式在Java应用中一个非常典型的例子就是JDBC驱动器。JDBC为所有的关系型数据库提供一个通用的界面。一个应用系统动态的选择一个合适的驱动器,然后通过驱动器向数据库引擎发出指令。这个过程就是将抽象角色的行为委派给实现角色的过程。

      JDBC这种架构,把抽象部分和具体实现部分分离开来,从而使得抽象部分和具体实现部分都可以独立的扩展。对于应用程序而言,之遥选用不同的驱动,就可以让程序操作不同的数据库,而无需更改应用程序,从而实现在不同的数据库上移植;对于驱动程序而言,为数据库实现不同的驱动程序,并不会影响应用程序。

      二、桥梁模式的例子(飞机信息系统)

      image.gif

      首先Airplane扮演抽象化角色,它声明出所有修正抽象化角色所需的接口

      抽象类代码Airplane(飞机)

      public abstract class  Airplane {
          public abstract void fly();
              AirplaneMaker airplaneMaker;
      }

      image.gif

      实现类代码

      AirplaneMaker

      abstract public class  AirplaneMaker{
          abstract public void produce();
      }

      image.gif

      修正抽象类代码

      空客机 Airbus

      public class Airbus extends AirplaneMaker {
          public void produce(){
              System.out.println("制造商:Airbus!");
          }
      }

      image.gif

      波音Boeing

      public class  Boeing extends AirplaneMaker{
          public void produce(){
              System.out.println("制造商:Boeing!");
          }
      }

      image.gif

      麦道MD

      public class MD extends AirplaneMaker{
          public void produce(){
              System.out.println("制造商:MD!");
          }
      }

      image.gif

      具体实现类代码

      货机 CargoPlane

      public class  CargoPlane extends Airplane{
          public void fly(){
              System.out.println("飞机类型:载货飞机!");
          }
      }

      image.gif

      客机 PassengerPlane

      public class  PassengerPlane extends Airplane {
          public void fly(){
              System.out.println("飞机类型:载客飞机!");
          }
      }

      image.gif

      测试程序

      public class Client {
          public static void  main(String[] args) {
              // TODO Auto-generated method stub
              AirplaneMaker mk=new Airbus();
              AirplaneMaker boe=new Boeing();
              AirplaneMaker md=new MD();
              Airplane lx=new CargoPlane();
              Airplane lx1=new PassengerPlane();
              mk.produce();
              boe.produce();
              md.produce();
              lx.fly();
              lx1.fly();
          }
      }

      image.gif

      运行结果

      image.gif


      目录
      相关文章
      |
      6天前
      |
      Java Android开发
      Eclipse 创建 Java 项目
      Eclipse 创建 Java 项目
      23 4
      |
      10天前
      |
      人工智能 监控 数据可视化
      Java智慧工地信息管理平台源码 智慧工地信息化解决方案SaaS源码 支持二次开发
      智慧工地系统是依托物联网、互联网、AI、可视化建立的大数据管理平台,是一种全新的管理模式,能够实现劳务管理、安全施工、绿色施工的智能化和互联网化。围绕施工现场管理的人、机、料、法、环五大维度,以及施工过程管理的进度、质量、安全三大体系为基础应用,实现全面高效的工程管理需求,满足工地多角色、多视角的有效监管,实现工程建设管理的降本增效,为监管平台提供数据支撑。
      27 3
      |
      11天前
      |
      SQL Java 数据库连接
      从理论到实践:Hibernate与JPA在Java项目中的实际应用
      本文介绍了Java持久层框架Hibernate和JPA的基本概念及其在具体项目中的应用。通过一个在线书店系统的实例,展示了如何使用@Entity注解定义实体类、通过Spring Data JPA定义仓库接口、在服务层调用方法进行数据库操作,以及使用JPQL编写自定义查询和管理事务。这些技术不仅简化了数据库操作,还显著提升了开发效率。
      25 3
      |
      14天前
      |
      Java 编译器 开发者
      Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
      本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
      32 2
      |
      14天前
      |
      前端开发 Java 数据库
      如何实现一个项目,小白做项目-java
      本教程涵盖了从数据库到AJAX的多个知识点,并详细介绍了项目实现过程,包括静态页面分析、数据库创建、项目结构搭建、JSP转换及各层代码编写。最后,通过通用分页和优化Servlet来提升代码质量。
      35 1
      |
      1月前
      |
      JavaScript 前端开发 Java
      解决跨域问题大集合:vue-cli项目 和 java/springboot(6种方式) 两端解决(完美解决)
      这篇文章详细介绍了如何在前端Vue项目和后端Spring Boot项目中通过多种方式解决跨域问题。
      351 1
      解决跨域问题大集合:vue-cli项目 和 java/springboot(6种方式) 两端解决(完美解决)
      |
      21天前
      |
      JavaScript Java 项目管理
      Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
      基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
      |
      24天前
      |
      缓存 IDE Java
      idea的maven项目打包时没有source下的文件
      【10月更文挑战第21天】idea的maven项目打包时没有source下的文件
      36 1
      |
      1月前
      |
      Java Apache Maven
      Java/Spring项目的包开头为什么是com?
      本文介绍了 Maven 项目的初始结构,并详细解释了 Java 包命名惯例中的域名反转规则。通过域名反转(如 `com.example`),可以确保包名的唯一性,避免命名冲突,提高代码的可读性和逻辑分层。文章还讨论了域名反转的好处,包括避免命名冲突、全球唯一性、提高代码可读性和逻辑分层。最后,作者提出了一个关于包名的问题,引发读者思考。
      Java/Spring项目的包开头为什么是com?
      |
      11天前
      |
      安全 Java 测试技术
      Java并行流陷阱:为什么指定线程池可能是个坏主意
      本文探讨了Java并行流的使用陷阱,尤其是指定线程池的问题。文章分析了并行流的设计思想,指出了指定线程池的弊端,并提供了使用CompletableFuture等替代方案。同时,介绍了Parallel Collector库在处理阻塞任务时的优势和特点。