意图
将抽象部分与它的实现部分分离,使它们都可以独立地变化。(GoF)
*可以去看JDBC的源代码
场景
现在我们有很多表要处理,同时又有很多操作要做。最简单的做法是在一个类里做完所有的操作,如我们在EJB服务器端的实现中进行JDBC操作。可是这样一来这个类将无比巨大,大到四只眼(眼睛兄)都看不过来!
有什么好办法能够降低这样操作的杂乱性呢?我们注意到这里有两个概念,分别是“表单(Table)”和“操作(Operator)”。也就是说这里有两个部分——“抽象”和“实现”。我们将这两个部分进行分离,然后根据需要,分别继承和实现表单和操作。这样我们就可以方便地通过表单和操作的组合来实现我们的工作了。
操作如:
java 代码
1. Table tbl1 = new Table1(new Insert());
2. tbl1.work();
3.
4. Table tbl2 = new Table2(new Update());
5. tbl2.work();
Table1和Table2都是Table的子类,他们都映射到数据库中特定的表。Insert和Update都是接口Operator的实现,分别完成特定的数据库操作。
好了,下面来先看看Operator的实现代码。
java 代码
1. public interface Operator {
2. /**
3. * 操作
4. *
5. * @param arg 传入的参数
6. * @return 操作结果
7. */
8. String work(String arg);
9. }
我们需要能对数据库进行插入和修改操作,因此分别建立Insert和Update类。
java 代码
1. // 插入操作
2. public class Insert implements Operator {
3.
4. public String work(String arg) {
5. String rs = "insert " + arg;
6. return rs;
7. }
8.
9. }
java 代码
1. // 修改操作
2. public class Update implements Operator {
3.
4. public String work(String arg) {
5. String rs = "update " + arg;
6. return rs;
7. }
8.
9. }
好了,我们再来看看抽象部分的实现。这里我们的对象是Table。
java 代码
1. public abstract class Table {
2. // 内置一个操作接口
3. protected Operator impl = null;
4.
5. public Table(Operator impl) {
6. this.impl = impl;
7. }
8.
9. /**
10. * 由子类来具体实现此操作
11. */
12. public abstract void work();
13.
14. }
现在我们有两个表单需要进行操作,他们分别是Table1和Table2。
java 代码
1. public class Table1 extends Table {
2.
3. public Table1(Operator impl) {
4. super(impl);
5. }
6.
7. public void work() {
8. System.out.println(this.impl.work("Table1"));
9. }
10.
11. }
java 代码
1. public class Table2 extends Table {
2.
3. public Table2(Operator impl) {
4. super(impl);
5. }
6.
7. public void work() {
8. System.out.println(this.impl.work("Table2"));
9. }
10.
11. }
这样我们在进行数据库的操作的时候,便可以随意地根据实际情况进行表单与操作的组合,将表单与操作桥接在一起来完成我们的任务。
java 代码
1. // 对table1进行插入操作
2. Table tbl1 = new Table1(new Insert());
3. tbl1.work();
4.
5. // 对table2进行修改操作
6. Table tbl2 = new Table2(new Update());
7. tbl2.work();
小结
Bridge设计模式感觉上是通过将对象与操作进行分离,然后对这两个基本概念进行继承及实现,通过对对象及操作的各种组合来完成相应的工作。
P.S.一直想不到一个好的例子来说明Bridge模式,今天吃早饭的时候突然想到可以用来应用于数据库操作。这几天就先按照这种想法做一个demo看看效果如何。呵呵,不知道会不会又是一种重复造轮子的行为呢?不过作为一种实践体会我觉得也很值得。
分享到:
相关推荐
VMware 15虚拟机桥接模式无法上网问题 步骤 1:在设置中找到 网络和internet—>>更改适配器选项—–>>以太网 查看 共享网络给虚拟机(有些电脑不用) 步骤2:查看VMware虚拟网络编辑器的VMnet0桥接模式设置 ...
所有模式都可分为类模式和对象模式两种,类模式是继承,对象模式是委托,而桥接模式和策略模式都是将任务委托给另外一个接口去实现,那么两者的区别什么呢?
Bridge 桥接模式(结构型模式)视频
图片浏览器的接口设计-桥接模式的运用 解决问题: 一个图像格式有两个基本的方面,一是结构,二是表象。其结构决定了图像是怎样存储的,而其表象决定了图像是怎样显示在屏幕上的。对于一个图像格式(BMP、JPG等)来...
利用桥接模式完成以下实例: 1、编辑与作者。出版社的编辑负责策划图书,并遴选作者完成图书的编著,然后根据图书的印张发布图书。作者负责完成图书的编著工作。 2、模拟毛笔:现需要提供大中小3种型号的画笔,...
桥接模式 桥接模式
桥接模式 C++ 实现
VMWare 6.0桥接模式虚拟机网络配置
设计模式 java 桥接模式
桥接模式的例子源码。这个源码因完成仓促,仅用来解释说明桥接模式含义,代码规范稍有欠缺,仅供参考。
C#面向对象设计模式纵横谈(8):Bridge 桥接模式(结构型模式) 体验课程
桥接模式和装饰模式,设计模式实验报告,BlueJ
设计模式专题之(十)桥接模式---设计模式桥接模式示例代码(python--c++)
设计模式-桥接模式(讲解及其实现代码)
设计模式 - 桥接模式
设计模式的桥接模式的例子,希望对大家有用
桥接模式通过将抽象部分和代码部分相分离,使之沿各自的维度变化而不互相影响,使用的时候通过对象参数进行连接,参数可进行变化
桥接模式的示例代码和文档,学习桥接模式的参考资料。
Android桥接模式demo,同步文章地址:http://blog.csdn.net/qq_28690547/article/details/51144783
海尔(Haier)、TCL、海信(Hisense)桥接模式