软件项目实训及课程设计指导——如何应用策略设计模式分离JDBC数据库连接中的外部环境信息
1、什么是策略(Strategy)设计模式
策略设计模式把“算法”(也就是软件应用系统中的业务规则或者待实现的功能等)和“环境”(封装软件应用系统在实际应用时的场景)相互分离,其中的“环境”程序类主要是负责维护和查询“算法”程序类,而各种“算法”则由具体的策略程序类加以封装和实现,并且策略程序类可以通过面向对象设计方法中的继承机制来产生出层次性的策略程序类,可以根据应用的需要进行替换。
策略设计模式在GOF设计模式的分类中属于GOF设计模式中的行为型类型的设计模式。如下示图为体现策略设计模式中的各个类之间关系的UML类图,依据此UML类图,可以了解到策略设计模式提供了一种替代面向对象设计方法中的继承的方法,将继承改变为组合,而且既保持了继承的优点(实现代码重用)但又比继承更具有灵活性(“算法”独立,可以任意地扩展)。
2、为什么要在软件应用系统编程实现中应用策略设计模式
(1)策略设计模式能够把“算法”和“环境”分离开
在软件应用系统的程序功能代码编程实现中,开发人员经常会应用策略设计模式,以达到把实现“算法”的程序代码本身与使用算法的“客户”端程序之间的耦合关系相互分离。也就是策略设计模式能够让“算法”独立于使用它的客户程序而独立地变化、并且“算法”自身的变化(比如“算法”的增减、修改等)不会影响到使用“算法”的客户端程序。
因此,应用策略设计模式后,在软件应用系统设计方面所能够达到的设计目标:
1)保证软件应用系统具有良好的可扩展性和可维护性;
2)使用策略设计模式可以在系统的需求发生变化时,对程序代码的修改量较少,并且能够快速地适应变化(通过添加新的功能实现类)。
(2)策略设计模式的应用场景示例一
比如,在构建软件应用系统持久层数据库连接Connection接口的对象实例时不希望出现下面的状况:
将实现各种不同物理数据库系统的“连接”的功能代码(在这里代表策略模式中的“算法”)直接出现在使用数据库连接对象实例的“程序”中(也就是策略模式中的“客户”——如软件应用系统持久层中的各种数据库访问操作的DAO组件)。
这样的设计方案将使得“客户”相关的程序代码和具体的“算法”功能实现的程序代码完全绑定,而且由于“算法”相关的程序也会经常发生变化。应用这样的设计方案的后果将会导致程序代码的可维护性比较差——因为一旦“算法”相关的程序代码发生了改变,将会影响到相关的各个客户程序也都需要被动地修改和完善。
(3)策略设计模式的应用场景示例二
作者再应用生活中的示例为读者说明策略设计模式中的“算法”和“环境”相互分离的作用效果——“汉堡包”为什么在全世界的口味是一样的呢?
因为“汉堡包”制作的工艺(“算法”)是独立“环境”的(不同的国家或者地区);而“汉堡包”的客户(不同国家的人)在不同的环境中都能够获得一致“口味”的汉堡包。
3、“J2EE项目实训——UML及设计模式”一书详细介绍了策略设计模式的具体实现
作者考虑到本文的篇幅关系,无法详细地为读者介绍GOF设计模式中的策略设计模式更深入的知识及具体实现程序代码示例等内容。因此,有关策略设计模式的具体编程实现及程序代码示例,请读者参考清华大学出版社出版的作者的“J2EE项目实训——UML及设计模式”一书(如下示图为该书的封面)中的第10章“典型GOF设计模式及应用”中的有关内容。
作者将为读者介绍如何将策略模式设计应用于创建软件应用系统持久层数据库连接Connection接口对象实例的功能实现程序代码中。
4、为什么要应用策略模式创建数据库连接Connection接口类型的对象实例
在JDBC数据库应用编程技术中,一般是利用下面程序代码示例中所示的常规的数据库连接类的功能实现代码完成对数据库连接Connection对象的实例化——常规的数据库连接Connection对象的实例化的功能实现代码示例
publicclassConnectDBBeanimplementsConnectDBInterface{
StringJDBC_DBDriver_ClassName=