`
guafei
  • 浏览: 323250 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论
阅读更多
意图
将抽象部分与它的实现部分分离,使它们都可以独立地变化。(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看看效果如何。呵呵,不知道会不会又是一种重复造轮子的行为呢?不过作为一种实践体会我觉得也很值得。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics