首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

桥接形式

2012-09-06 
桥接模式意图将抽象部分与它的实现部分分离,使它们都可以独立地变化。(GoF)*可以去看JDBC的源代码场景现在

桥接模式
意图
将抽象部分与它的实现部分分离,使它们都可以独立地变化。(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看看效果如何。呵呵,不知道会不会又是一种重复造轮子的行为呢?不过作为一种实践体会我觉得也很值得。

热点排行