设计模式之Birdge

来源:互联网 发布:2016陕西网络知识竞赛 编辑:程序博客网 时间:2024/04/30 17:35

       也许大家都对驱动程序非常了解,在JAVA领域,JDBC就是一个执行SQL语句的应用程序接口(API),有了它我们利用统一的接口操作任何厂商的数据库,只要我们为其加载相应数据库厂商的驱动程序。如果我们面临开发一个这样的应用的时候,也许很多人会提出这样的设计方案,创建一个顶层抽象类定义所需要的各种抽象方法,然后由其子类实现抽象方法。是的这样的设计也可以达到操作各种数据库的目标,可是缺点也是显而易见的,第一,应用程序的开发和各种厂商的驱动程序紧耦合在一起。第二,随着需求的变更,我们可能需要开发新的子类来完成新数据库的需要。第三,容易产生代码冗余。第四,父类的任何变化,子类毫无意外的全部受影响。

所以上述的设计方案并不可行,而Birdge模式却能很好的解决问题。Birdge模式的设计意图是将抽象和其实现相分离,这样它们之间可以独立相互变化而互不牵扯。Birdge的设计精髓就是将抽象方法移至接口中,这样抽象方法的具体实现从抽象出来,让2个类在层次结构上相互独立。

下面的代码是我模拟驱动程序说明Birdge模式意图的一个很好的例子:

 

   BirdgeMange是管理和注册驱动的抽象类,而BirdgeMangeA则实现抽象类进行具体驱动程序操作。BirdgeDriver是驱动接口,负责定义驱动的操作,而BirdgeDriverAImpl,BirdgeDriverBImpl,BirdgeDriverCImpl则是模拟的3种不同的驱动实现类,在main函数中我分别注册不同的驱动类,然后分别调用之,得到的结果是:

=======BirdgeDriverAImpl=======
=======BirdgeDriverBImpl=======
=======BirdgeDriverCImpl=======

 很明细我们看到了因为注册驱动类的不同,最好执行的结果也不同。再回到前面提到的那个设计方案,如果我们要实现这样的功能,我们分别要实现3个针对不同驱动的管理类,而且如果任何的需求变更而带来的副作用是非常庞大的。

而基于Birdge的设计意图,把抽象方法的抽象实现转移到Driver接口中,而对于其实现我们并不关心,而实现的细节也于我们客户端的调用完全隔离。所以这样的架构很清楚的划分了驱动程序开发者和应用程序开发者两种角色。

 好了,Birdge模式的介绍到此结束,下一章我将介绍责任型模式-Singleton模式。

 

原创粉丝点击