Factory Method情势在Javamail中的操纵[Java编程]
本文“Factory Method情势在Javamail中的操纵[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
计划情势在软件工程中占据重要地位,而JavaMail是Java平台的一个扩大,为管理电子邮件供应了统一的利用编程接口.本文谈论Factory Method计划情势在Javamail中的利用.
1、情势简介
情势的概念最早是呈目前城市建筑范畴的.lexander的一本关于建筑的书中明确的给出了情势的概念,用来办理在建筑中的一些问题.后来,这个概念渐渐的被计算机科学所采取.《Design Patterns: Elements of Reusable Object-Oriented Software》[1](以下简称《计划情势》)则可谓计划情势范畴的经典书籍之一.它创始了软件工程范畴的情势化进程.
计划情势的简单定义就是关于一类反复呈现的问题的可重用的办理筹划.在软件工程中一个计划情势办理一类软件计划问题.计划情势中很多办法其实很早就呈现了,并且在利用中也对比多.但是直到《计划情势》出来之前,并没有一种统一的熟习.大概说,当时刻并没有对情势形成一个概念.这些办法还仅仅是处在经验阶段,并没有可以被系统的整理,形成一种理论.
每一个计划情势都系统的命名,注释和评价了面向对象系统中的一个重要的和反复呈现的计划.这样,我们只要搞清楚这些计划情势,便可以完好大概说很大程度上吸取了那些包含在情势中的贵重的经验,对面向对象的系统可以有更为完善的理解.更为重要的是,这些情势都可以直接用来指导面向对象系统中至关重要的对象建模问题.假若有相同的问题后台,那么很简单,直接套用这些情势便可以了.这可以省去你很多的工作.
在《计划情势》一书中触及到23个情势,被分类为成立型情势(Creational Patterns),构造型情势(Structural Patterns)和行为情势(Behavioral Patterns),辨别从对象的成立,对象和对象间的构造组合以及对象交互这三个方面为面向对象系统建模办法赐与了解析和指导.
此中成立型计划情势(Creational Patterns)描写怎样成立一个对象.它躲藏对象成立的细节,使程序代码不依靠具体的对象,这样当我们增添一个新的对象时几近不需求改正代码.构造型计划情势(Structural Patterns)描写类和对象之间怎么组织起来形成大的构造,主要利用担当来组织接口或实现.行为型计划情势(Behavioral Patterns)描写算法以及对象之间的任务分配,它所描写的不但仅是对象或类的计划情势,还有它们之间的通讯情势.
计划情势在Java中得到了遍及利用.在《Thinking in Java》[3]一书中,Bruce Eckel介绍了Singleton、Prototype、Observer、Visitor等计划情势在Java中的具体利用和实现,以下将介绍Factory Method计划情势在Javamail中的利用.从中可看出计划情势不但有助于软件计划,对理解软件构造也很有帮忙.
2、Javamail简介
经过几年的发展,Java语言已相当作熟,并在各范畴得到遍及利用.分外是J2EETM(JavaTM 2 Platform, Enterprise Edition)的呈现,更是极大地便利了分布式利用程序的成立.作为Java平台的一个扩大--JavaMail,也是J2EETM的技术之一,为管理电子邮件供应了统一的利用编程接口(API,Application Programming Interface).它使服务供应者(service providers)可以利用Java语言为它们自己的邮件或消息处理系统供应一致的接口,利用程序可以利用这些一致的接口便利地与这些系统通信.
以下是一些Javamail API中的抽象类,由它们可以构成典型的邮件系统:
Message-代表一个电子邮件消息.
Folder-以分级的情势组织消息.一个Folder可以包含多条消息、多个Folder.
Store-代表由邮件服务器 style="COLOR: #000000" href="http://server.it168.com/" target=_blank>服务器管理的消息数据库,一个具体的Store利用一种特别的拜候协议(如Pop3Store利用Pop3协议,IMAPStore利用IMAP协议),并可包含一个或多个Folder.
Transport-代表一个特别的传输协议,一个具体的Transport利用具体的传输协议发送消息.
3、计划情势Factory Method
此情势属于成立型计划情势,它只定义成立对象的接口,而由它的子类负责成立具体的对象,操纵子类实例化差别的对象.图一是Factory Method 情势构造的类图(Class Diagram),此中:
Product 定义了由factory method所成立对象的统一接口.
ConcreteProduct 具体的类,实现Product接口.
Creator 普通为抽象类,声明若干factory method(办法),由它成立范例为Product的对象.正因为它能"生产"对象,所以称为factory method.Creator也大概拥有一个办法成立某个缺省的具体对象.
ConcreteCreator 重载factory method以成立某个 ConcreteProduct 的具体实例.
也就是说Creator依靠于ConcreteCreator成立Product型的ConcreteProduct对象. Factory method使利用程序代码只需处理Product接口,而与具体的类(ConcreteProduct)无关,加强了代码可重用性,因为它独立于用户定义的具体的类.
图二指导了Factory Method在Javamail中的利用.此中的类Store相当于图一中的Creator,Store的两个子类Pop3Store,IMAPStore相当于图一中的ConcreteStore,类Folder相当于Product,Folder的两个子类Pop3Folder和IMAPFolder相当于ConcreteProduct,而Store中的办法getFolder就是一个factory method,由子类Pop3Store实例化Pop3Folder,由IMAPStore实例化IMAPFolder.
近似的图二中的Folder相关于Store来说是Product,但相关于Messsage却也是一个Creator,其办法getMessage一样也是factory method.
4.1可重用性
上表是利用Factory Method情势成立对象和直接成立对象的对比,明显前者关于成立差别的对象所用的代码几近相同,便于代码重用,此后者关于成立差别的对象所用代码就相差很大,想做窜改就对比麻烦,若想重用就几近是不大概的.计划可重用的面向对象软件是非常不易的,恰本地应用计划情势则可在一定程度上办理这个问题.
4.2 可扩大性
若有一种对应与Pop3、IMAP的新的邮件协议NewP,则很简单使系统支持这种新的协议,扩大Store成立新类NewPStore,扩大Folder成立新类NewPFolder,扩大Message成立新类NewPMessage,就成立起了新协议的大致框架.
5、Parameterized Factory Method在Javamail中的利用
Factroy Method计划情势还有一个变异Parameterized factory method情势.关于Parameterized factory method情势,其factory method有一参数,用于指明需成立的对象的范例,这样一个类的factory method可以成立多种具体范例(ConcreteProduct)的对象,与Factory Method相同的是它所成立的对象都具有一样的接口Product.
在Javamail中有一个final static类Session,不能成立它的子类,通过此类设置和拜候一些特别的属性,别的此类还拥有若干Parameterized Factory Method,可以成立多种对象.
5.1可重用性
图三中的getStore和getTransport都是Parameterized Factory Method,以getStore为例,给参数以差别的值就可以成立差别的对象.比方:
2
3 Store store1 = session.getStore("pop3"); //实例化Pop3Store
4
5 Store store2 = session.getStore("IMAP"); //实例化IMAPStore
6
7
如上代码所示,通过给出差别的参数,即能实例化差别的对象,其代码重用是相当简单的.
5.2可扩大性
若你新建了一个邮件系统,拥有Store的特别子类NewPStore,此类采取特别的协议NewP,并已举行了相关设置,如在javamail.default.providers文件中设置了:
2
3 这样你便可以操纵
4
5 Session session = Session.getDefaultInstance(props, authenticator);
6
7 Store store = session.getStore("NewP"); //实例化NewStore
8
9
成立一个NewPStore型对象.
6、总结
Factory Method及其变异Parameterized factory method 都是极其常用的计划情势.在Javamail中还有很多地方利用了Factory Method或Parameterized Factory Method,比方类Session中的办法getProvider、getFolder也是Parameterized Factory Method, getInstance也可以算是Parameterized Factory Method,不过它对比特别,它实例化Session自身.并且二者都很简单实现代码重用,举行系统扩大.
但Factory Method情势和Parameterized factory method略有差别.关于Factory Method,有一个潜在的不利因素,那就是为了成立一个特别的对象,必须有呼应于Creator的一个子类.如上所述成立一个Pop3Folder对象必必要有一个Store的子类Pop3Store, 成立一个IMAPFolder对象必必要有一个Store的子类IMAPStore.而关于Parameterized factory method只需求一个具体的Creator,供应差别的参数就可以成立差别的对象.所以可视实际情形在这二者之中取舍.普通原则是:当成立一个具体的Product时确切需求扩大Creator,那么就采取Factory Method,如Pop3和IMAP是二者辨别对比大的差别的邮件协议,Pop3Store和IMAPStore差别很大,成立Pop3Folder确切需求有一个特别的Store扩大--Pop3Store,关于IMAP也一样,此时就需求采取Factory Method情势.而为了成立Pop3Store、IMAPStore,如还是采取Factory Method情势而辨别成立了Session的子类Pop3Session、IMAPSession,其意义就不是很大,美满是为了成立Pop3Store而成立Pop3Session,Session、Pop3Session、IMAPSession三者代码几近相同,可以说是一种代码冗余.
总之应当视具体情形利用得当的计划情势,才能充分施展计划情势应有的作用.
以上是“Factory Method情势在Javamail中的操纵[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |