java面试题之----jdbc中使用的设计模式(桥接模式)

摘要:
Bridge模式基于类的最小设计原则,通过使用封装、聚合和继承,允许不同的类承担不同的责任。它的主要特征是将抽象与行为实现分离,以保持每个部分的独立性,并应对它们的功能扩展。桥梁模式的角色和职责:1。客户端调用者这是网桥模式的调用者。它的作用是为班级牵线搭桥。桥接模式需要正确识别系统中两个独立变化的维度,因此其使用范围具有一定的局限性。

1.JDBC(JavaDatabase Connectivity)

JDBC是以统一方式访问数据库的API.

它提供了独立于平台的数据库访问,也就是说,有了JDBC API,我们就不必为访问Oracle数据库专门写一个程序,为访问Sybase数据库又专门写一个程序等等,只需要用JDBC API写一个程序就够了,它可以向相应数据库发送SQL调用.JDBC是Java应用程序与各种不同数据库之间进行对话的方法的机制.简单地说,它做了三件事:与数据库建立连接--发送操作数据库的语句--处理结果.

 

jdbc规范使用到主要涉及的设计模式:桥接模式

 

 

桥接模式(Bridge)是一种结构型设计模式。Bridge模式基于类的最小设计原则,通过使用封装、聚合及继承等行为让不同的类承担不同的职责。它的主要特点是把抽象(Abstraction)与行为实现(Implementation)分离开来,从而可以保持各部分的独立性以及应对他们的功能扩展。

桥接模式的角色和职责:

1.Client 调用端

这是Bridge模式的调用者。

2.抽象类(Abstraction)

抽象类接口(接口这货抽象类)维护队行为实现(implementation)的引用。它的角色就是桥接类。

3.Refined Abstraction

这是Abstraction的子类。

4.Implementor

行为实现类接口(Abstraction接口定义了基于Implementor接口的更高层次的操作)

5.ConcreteImplementor

Implementor的子类

 

桥接模式的UML图如下:

java面试题之----jdbc中使用的设计模式(桥接模式)第1张

示例代码如下:

首先定义Implementor接口,其中定义了其实现类必须要实现的接口operation()

1 public interface Implementor {
2     public void operation();
3 }

下面定义Implementor接口的两个实现类:

1 public class ConcreateImplementorA implements Implementor {
2     @Override
3     public void operation() {
4         System.out.println("this is concreteImplementorA's operation...");
5     }
6 }
1 public class ConcreateImplementorB implements Implementor {
2     @Override
3     public void operation() {
4         System.out.println("this is concreteImplementorB's operation...");
5     }
6 }

 

下面定义桥接类Abstraction,其中有对Implementor接口的引用:

复制代码
 1 public abstract class Abstraction {
 2     private Implementor implementor;
 3 
 4     public Implementor getImplementor() {
 5         return implementor;
 6     }
 7 
 8     public void setImplementor(Implementor implementor) {
 9         this.implementor = implementor;
10     }
11 
12     protected void operation(){
13         implementor.operation();
14     }
15 }
复制代码

下面是Abstraction类的子类RefinedAbstraction:

1 public class RefinedAbstraction extends Abstraction {
2     @Override
3     protected void operation() {
4         super.getImplementor().operation();
5     }
6 }

下面给出测试类:

复制代码
 1 public class BridgeTest {
 2     public static void main(String[] args) {
 3         Abstraction abstraction = new RefinedAbstraction();
 4 
 5         //调用第一个实现类
 6         abstraction.setImplementor(new ConcreateImplementorA());
 7         abstraction.operation();
 8 
 9         //调用第二个实现类
10         abstraction.setImplementor(new ConcreateImplementorB());
11         abstraction.operation();
12 
13     }
14 }
复制代码

运行结果如下:

java面试题之----jdbc中使用的设计模式(桥接模式)第6张

这样,通过对Abstraction桥接类的调用,实现了对接口Implementor的实现类ConcreteImplementorA和ConcreteImplementorB的调用。实现了抽象与行为实现的分离。

 


 

 

 

 

总结:

1.桥接模式的优点

(1)实现了抽象和实现部分的分离

桥接模式分离了抽象部分和实现部分,从而极大的提供了系统的灵活性,让抽象部分和实现部分独立开来,分别定义接口,这有助于系统进行分层设计,从而产生更好的结构化系统。对于系统的高层部分,只需要知道抽象部分和实现部分的接口就可以了。

(2)更好的可扩展性

由于桥接模式把抽象部分和实现部分分离了,从而分别定义接口,这就使得抽象部分和实现部分可以分别独立扩展,而不会相互影响,大大的提供了系统的可扩展性。

(3)可动态的切换实现

由于桥接模式实现了抽象和实现的分离,所以在实现桥接模式时,就可以实现动态的选择和使用具体的实现。

(4)实现细节对客户端透明,可以对用户隐藏实现细节。

2.桥接模式的缺点

(1)桥接模式的引入增加了系统的理解和设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计和编程。

(2)桥接模式要求正确识别出系统中两个独立变化的维度,因此其使用范围有一定的局限性。



免责声明:文章转载自《java面试题之----jdbc中使用的设计模式(桥接模式)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇RecyclerView下拉刷新和上拉加载更多实现Coverage测试代码覆盖(Python)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

UVM_COOKBOOK学习【DUT-Testbench Connections】

关注微信公众号摸鱼范式,后台回复COOKBOOK获取COOKBOOK原本和译本 PDF度盘链接 将testbench连接到DUT 概述 本节,我们主要讨论将UVM testbench连接到RTL DUT的问题。 UVM testbench对象不能直接连接到DUT信号来驱动或采样。driver和monitor组件对象与DUT之间的连接是通过一个或多个具有静态...

注解之----@WebService

@WebService这个标签的作用是什么 原文链接:https://www.cnblogs.com/xinruyi/p/11112061.html 当实现 Web Service 时,@WebService 注释标记 Java 类;实现 Web Service 接口时,标记服务端点接口(SEI)。 (声明webservice服务) 要点:  • 实现...

Slurm任务调度系统部署和测试(源码)(1)

1. 概述1.1 节点信息2. 节点准备3. 部署NTP服务器4. 部署LDAP服务器5. 部署Munge认证服务6. 部署Mysql数据库服务7. 部署slurm7.1 创建slurm用户7.2 挂载全局文件系统7.3 slurm下载7.4 编译安装8. slurm配置8.1 配置slurm.conf8.2 配置slurmdbd.conf8.3 配置c...

禁用wordpress自动保存为草稿

wordpress有个很讨厌的功能,叫Post Revisions,保存博文日志的不同版本,同样的内容多次占用数据库,多人用户维护一个blog用这个有用处,单一维护的blog基本是数据库浪费空间。禁用Post Revisions的方法是,在wp-config.php文件中增加一行 define(‘WP_POST_REVISIONS’, false); 那么...

sqlite入门基础(一):sqlite3_open,sqlite3_exec,slite3_close

打开数据库链接sqlite3_open用法 原型: int sqlite3_open( const char *filename, /* Database filename (UTF-8) */ sqlite3 **ppDb /* OUT: SQLite db handle */ ); 用这个函数开始数据库操作。需要传入两个参...

在C#中利用Nuget包使用SQLite数据库和Linq to SQLite

本来是学习在VB中使用SQLite数据库和Linq to SQLite,结果先学习到了在C#中使用SQLite数据库和Linq to SQLite的方法,写出来与大家共同学习。(不知道算不算不务正业) 1、建立或打开一个C#项目,如果是新建的项目则需要先保存一下,不然无法安装Nuget包。 2、安装Nuget的Linq to SQLite包,打开Nuget...