Bridge - 桥接模式


意图
将抽象部分与它的实现部分分离,使它们都可以独立地变化。(GoF)

场景
现在我们有很多表要处理,同时又有很多操作要做。最简单的做法是在一个类里做完所有的操作,如我们在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看看效果如何。呵呵,不知道会不会又是一种重复造轮子的行为呢?不过作为一种实践体会我觉得也很值得。







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本教程为授权出品教程1) 优秀的程序应该是这样的:阅读时,感觉很优雅;新增功能时,感觉很轻松;运行时,感觉很快速,这就需要设计模式支撑2) 设计模式包含了大量的编程思想,讲授和真正掌握并不容易,网上的设计模式课程不少,大多讲解的比较晦涩,没有真实的应用场景和框架源码支撑,学习后,只知其形,不知其神。就会造成这样结果: 知道各种设计模式,但是不知道怎么使用到真实项目。本课程针对上述问题,有针对性的进行了升级 (1) 授课方式采用 图解+框架源码分析的方式,让课程生动有趣好理解 (2) 系统全面的讲解了设计模式,包括 设计模式七大原则、UML类图-类的六大关系、23种设计模式及其分类,比如 单例模式的8种实现方式、工厂模式的3种实现方式、适配器模式的3种实现、代理模式的3种方式、深拷贝等3) 如果你想写出规范、漂亮的程序,就花时间来学习下设计模式吧课程内容和目标本课程是使用Java来讲解设计模式,考虑到设计模式比较抽象,授课采用 图解+框架源码分析的方式1) 内容包括:设计模式七大原则(单一职责、接口隔离、依赖倒转、里氏替换、开闭原则、迪米特法则、合成复用)、UML类图(类的依赖、泛化和实现、类的关联、聚合和组合) 23种设计模式包括:创建型模式:单例模式(8种实现)、抽象工厂模式、原型模式、建造者模式、工厂模式。结构型模式:适配器模式(3种实现)、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式(3种实现)。行为型模式:模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter模式)、状态模式、策略模式、职责链模式(责任链模式)。2) 学习目标:通过学习,学员能掌握主流设计模式,规范编程风格,提高优化程序结构和效率的能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值