与Spring技术相关的J2EE设计模式

上传人:pu****.1 文档编号:562152723 上传时间:2022-09-30 格式:DOCX 页数:9 大小:153.68KB
返回 下载 相关 举报
与Spring技术相关的J2EE设计模式_第1页
第1页 / 共9页
与Spring技术相关的J2EE设计模式_第2页
第2页 / 共9页
与Spring技术相关的J2EE设计模式_第3页
第3页 / 共9页
与Spring技术相关的J2EE设计模式_第4页
第4页 / 共9页
与Spring技术相关的J2EE设计模式_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《与Spring技术相关的J2EE设计模式》由会员分享,可在线阅读,更多相关《与Spring技术相关的J2EE设计模式(9页珍藏版)》请在金锄头文库上搜索。

1、与 Spring 技术相关的 J2EE 设计模式1、工厂模式(1) 什么是工厂模式工厂模式主要是为创建对象提供一种接口,从而封装了创建对象的细节过程,使得外界调用一个对象 时,根本无需关心这个对象是如何产生的。也即要达到将创建实例的责任与使用实例的责任分开的目的。(2) 工厂模式的具体应用的形式工厂模式分为工厂方法模式和抽象工厂模式。两者主要区别是 工厂方法是创建一种产品接口下的产品对象,从而实现通过一个通用的接口创建出不同的类对象 而抽象工厂模式是创建多种产品接口下的产品对象。这两个模式没有很明显的区别,区别在于需要创建对象的复杂程度上。如果我们创建对象的方法变得 复杂了,我们就可能要采用抽

2、象工厂模式,将共同部分封装在抽象类中,不同部分使用子类实现。(3) 工厂模式中的工厂方法(Factory Method)的具体应用为什么工厂模式在Java应用中是如此常用?因为工厂模式就相当于创建实例对象的new(生产或者创 建出某一对象产品),我们经常要根据类Class生成实例对象,如TVProduct myTV二new TVProduct ()。 工厂模式也是用来创建实例对象的,对使用new来创建对象的应用,应该考虑是否可以实用工厂模式,虽 然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。( 4)工厂方法的作用 将创建实例的工作与使用实例的工作分开-一面向对象的

3、封装(Encapsulation)和分派 (Delega tion)原则。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可 以接纳新产品。 但缺点是当产品类修改时,工厂类也要做相应的修改。因为面向对象的封装(Encapsulation)和分派(Delegation)原则告诉我们,尽量将长的代码分派“切 割”成每段,将每段再“封装”起来(减少段和段之间偶合联系性),这样,就会将风险分散,以后如果需 要修改,只要更改每段,不会再发生牵一动百的事情。( 5)工厂方法的程序代码示例public abstract class Productpublic abstract void ma

4、keFunction();public class TVSet extends Productpublic void makeFunction()public class Monitor extends Productpublic void makeFunction()public class Factory public static final TVSet_Product=1;public static final Monitor_Product=2;public static Product creatorProduct(int productKind)if (productKind =

5、1)return new TVSet();else if (productKind =2)return new Monitor(); 在使用者的程序代码中只需要采用如下的代码来获得某以产品TVSet myOneTV=(TVSet)Factory.creatorProduct(Factory.TVSet_Product); myOneTV.MakeFunction();(6) 工厂方法的应用要点 功能接口:使用工厂方法要注意几个角色,首先你要定义产品的功能接口或者产品的功能抽象类, 如上面的 Product 类 产品的功能接口下有该功能的各个具体产品的实现类,如TVSet、Monitor等类 工

6、厂类:其次还要有一个工厂类(如 Factory 类),用来生成所需要的各个产品 Product。(7) 利用工厂方法模式实现DAO 抽象 DAO 类package bmp20beanDao;import java.sql.*;import javax.naming.*;public abstract class BMP20AbstractDAOpublic abstract Connection getBMPDBMSConnection() throws NamingException, SQLException; 某一种数据源的 DAO 实现类package bmp20beanDao;imp

7、ort java.sql.*;import javax.sql.DataSource;import javax.naming.*;public class BMP20DAO extends BMP20AbstractDAOpublic Connection getBMPDBMSConnection() throws NamingException, SQLExceptionInitialContext ic = new InitialContext();DataSource ds = (DataSource)ic.lookup(SqlServer2000JNDI);Connection con

8、 = ds.getConnection();return con; 创建工厂类package bmp20beanDao;public class DAOFactorypublic static final int SQLServer2000_DAO=1;public static BMP20AbstractDAO creatorDAO(int daoKind)BMP20AbstractDAO bMP20AbstractDAO=null;switch(daoKind)case SQLServer2000_DAO: bMP20AbstractDAO=new BMP20DAO(); break;re

9、turn bMP20AbstractDAO;(8) 为什么要使用工厂方法设计模式来实现DAO 使一个类的实例化延迟到其子类 通过工厂方法的设计模式从而可以定义一个用于创建对象的接口,但让子类决定实例化哪一个类。因为工厂方法能够使一个类的实例化延迟到其子类。 因为我们需要根据数据库的不同,由类工厂决定实例化哪个类 因为,在企业的实际应用中我们经常可能会处理对多种数据库的操作,因此,需要首先定义一个操纵数据库的接口,然后,根据数据库的不同,由类工厂决定实例化哪个类。2、抽象工厂(1) 工厂模式中的抽象工厂(Abstract Factory)的具体应用核心工厂类不再负责所有产品的创建,而是将具体创建

10、的工作交给子类去做,成为一个抽象工厂角色, 该工厂类仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。(2) 工厂方法和抽象工厂这两个模式的区别 工厂方法和抽象工厂这两个模式的区别在于需要创建对象的复杂程度上,如果我们创建对象的方法变得复杂了,一般应该采用抽象工厂的工厂模式。将共同部分封装在抽象类中,不同部分使用子类实现。(3) 抽象工厂的程序代码示例public abstract class Factorypublic static final TVSet_Product=1;public static final Monitor_Product=2;public

11、 abstract Product creatorProduct(int productKind);public class SpecialFactoryOne extends Factorypublic Product creatorProduct(int productKind)public class SpecialFactoryTwo extends Factorypublic Product creatorProduct(int productKind)3、单例设计模式 Singleton(1) 为什么要提供 Singleton 模式在计算机的应用中,我们经常需要管理的资源包括软件外

12、部资源,譬如,每台计算机可以有若干个打 印机,但只能有一个打印处理器软件。每台计算机可以有若干传真卡,但是只应该有一个传真软件管理传 真。每台计算机可以有若干通讯端口,你的软件应当集中管理这些通讯端口,以避免同时一个通讯端口被 两个请求同时调用。同时也需要管理的资源包括软件内部资源,譬如,大多数的软件都有一个(甚至多个 ) 属性(properties)文件存放系统配置。这样的系统应当有一个对象来管理一个属性文件。很多软件都有数据 库,一般而言,整个软件应当使用一个联接通道,而不是任意在需要时就新打开一个联接通道。需要管理的软件内部资源也包括譬如负责纪录网站来访人数的部件,记录软件系统内部事件、

13、出错信 息的部件,或是进行系统表现监查的的部件,等等。这些部件都必须集中管理,不可政出多头。(2) Singleton 模式在 J2EE 中的应用创建全局服务定位器类对象为了避免在服务定位器类中重复产生出 InitialContext 对象,同时并采用缓存机制以提高效率,在 本项目中的应用中只提供一个服务定位器类的对象实例(一个全局对象),因此使用单例设计模式。通过 使用单例模式可以实现只有一个类实例存在,这可以通过设计一个静态和同步方法来实现。(3) Singleton 模式主要作用Singleton模式主要作用是保证在Java应用程序中,一个类只有一个实例存在。在很多操作中,比如 建立目录

14、、数据库连接都需要这样的单线程操作以达到对系统资源的访问进行控制之目的。单例模式只应在有真正的“单一实例”的需求时才可使用。 优点Single ton模式就为我们提供了这样实现的可能。使用Single ton的好处还在于可以节省内存,因为 它限制了实例的个数,有利于Java垃圾回收(garbage collection)。我们常常看到工厂模式中类装入器(class loader)中也用Single ton模式实现的,因为被装入的类实 际也属于资源。 特点在下面的对象图中,有一个“单例对象”,而“客户甲”、“客户乙”和“客户丙”是单例对象的三个 客户对象。可以看到,所有的客户对象共享一个单例对象

15、。而且从单例对象到自身的连接线可以看出,单 例对象持有对自己的引用。(蓉戸甲j (容戸z j (壽戸丙j(4)单例模式有以下一些基本特点:单例类只能有一个实例(需要设计私有的构造函数-因此该类不能被继承和定义一个静态实例 变量) 单例类必须自己创建自己的唯一实例(因为构造函数为private,从而客户端不能直接将之实例 化,而必须通过这个静态工厂方法将之实例化) 单例类使用一个静态的属性存储自己的惟一实例,并且必须给所有其它对象提供这一实例(提供 一个方法如getlnstance()来构造并返回这个实例变量) 该类只能有一个实例并且它必须自行创建这个实例,它还必须自行向整个系统提供这个实例(5)实现单例模式的思路把 constructor 設為 private 讓其他 client 無法直接建立物件. client 如果要取得這單一物件 則必須經由 static public method 來取的物件。当我们调用这个 getInstance 方法时,如果类

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号