Java中的设计模式-Java开发Java经验技巧_第1页
Java中的设计模式-Java开发Java经验技巧_第2页
Java中的设计模式-Java开发Java经验技巧_第3页
Java中的设计模式-Java开发Java经验技巧_第4页
Java中的设计模式-Java开发Java经验技巧_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、java中的设计模式- java开发java经验技巧java中的设计模式木文由importnew刘家财翻译自stackoverflowo欢迎加入翻译小组。转载请见文末要 求。提问:我止在学习gof的设计模式,想了解些它们在实际中的应用的例了。 大家能给我举一些使用设计模式的好例子吗?尤其是在java类库屮。赞同最高的回答:你可以通过wikipedia对设计模式有个整体上的理解。wikipedia上也提高了 gof 所涉及到的模式。我这里总结一下,并且尽可能指出在javase javaee的api 中是如何运用这些模式的。创建型设计模式抽象工厂模式特点:创建方法返回一个可以用来创建抽象类或接口的

2、工厂类。 javax.xml.parsers.documcntbuildcrfactor y# ncwlnstancc() javax.xml.transform.transformerfactor y# newlnstance() javax.xml.xpath.xpathfactory# newlnstance()生成器模式特点:创建方法返回这个实例本身。 javaang.stringbuilder#append()不同步 java.lang.stringbuffer#append()同 步 java.nio.bytebuffer#put()(除此之外,还有 charbuffer,shor

3、tbuffer,intbuffer,longbuffer,floatbuffer 与 doublebuffer) javax.swing.grouplayout.group#addcomponcnt() java.lang.appendable 的所有实现工厂方法模式特点:创建方法返回抽象类或接i的实现。 java.util.calendar#getinstance() java.util.rcsourccbundlc#gctbundlc() java.text.numberformat#getinstance() java. nio.charsetchaset#forname() .urls

4、treamhandlerfactory#createurlstreamhandler(string)对于每个协议(protocol)返回一个单例对象原型模式特点:创建方法返冋一个同类型且具有相同属性的另一个实例。 java.lang.object#clone()(这个类必须实现 java.lang.cloneable)单例模式特点:创建方法返冋同一个实例(无论在何时调用)。 java.lang.runtime#getruntime() java.awt.desktop #getdesktop()结构型模式适配器模式特点:创建方法接受一个与当前类不同的抽象类或接口的实例作为参数,返回一 个经过修

5、饰或重写给定参数实例的抽象类或接口的实现。 java.uti larrays#aslist() java.io.inputstreamreader(inputstream)返回一个 reader 对象 java.io.outputstreamwriter(outputstream)返四一个 writer 对彖 javax.xml.bind.annotation.adapters.xml adapter#marshal()与#unmarshal()桥接模式特点:创建方法接受一个与当前类不同的抽象类或接口的实例作为参数,返冋一 个经过代理或使用给定参数实例的抽象类或接口的实现。 暂吋没有想到,一个

6、可以想到的例子是new linkedhashmap(linkedhashset, list), 这个方法返回一个不可修改的linkedmap,它就没有拷贝参数中的元素(item), iflj 是直接使用它们。java.util.collections#newsetfrommap()和 singletonxxx()方法也与 之类似。组合模式特点:行为方法把和同抽象类或接口的实例转化为一个树结构。 java.awt.container#add(component)(几乎对所冇的 swing 都适用) ponent.uicomponent#getchildren()(几乎对所有的 jsf ui 都适

7、用)装饰模式特点:创建方法以一个抽象类或接口的实例为参数,返冋值是增加了额外方法的 给参数实例。 java.io.inputstream> outputstream> reader> writer 这些类的所有子类,它们都有一 个接受相同类型作为参数的构造函数。 java.util.collections checkedxxx()> synchronizedxxx()> unmodifiablexxx()方法 javax.servlet.http.httpservletrequestwrapper 与 httpservletresponsewrapper外观模式特

8、点:行为方法在内部使用完全不同的抽象类或接口的实例做封装。 javax.faces.context.facescontext,这个类在内部使用 了抽象类或接口 lifecycle、 viewhandler> navigationhandler以及英他一些用八不需要关心的类(通常这些类都 是可通过注入垂写的)。 javax.faces.context.externalcontext,这个类在内部使用了 servlc(comcxt、hupsession、 httpscrvlctrcqucsthttpscrvlctrcsponsc 等。享元模式特点:创建方法返回一个缓存的实例,与多例模式有些类

9、似。 java.lang.integei-#valueof(int)(除此z夕卜,类似的述有 booleanbyte> character> short long)代理模式特点:创建方法返回一个给定抽象类或接口的实例,这个实例代理或使用了这个 给定抽象类或接口的另一个实现。 java.lang.reflect.proxy java.rmi.*包b的所有类恕我直言wikipedia上的类了不是很好,惰性加载实际上和代理模式一点关系 也没冇。行为模式职责链模式特点:行为方法间接调用队列屮同一抽彖类或接口的另一实例的同名方法。 java.utiljogging.logger#log()

10、javax.servlet.filter#dofilter()命令模式特点:一个抽彖类或接口屮的行为方法调用另一个在创建时经命令方法包装的抽 彖类或接口实现的另一个方法。 java.lang.runnable 的所有实现 javax.swing.action 的所有实现解释器模式特点:行为方法返冋结构上不同的抽象类或接口的实例,需要注意的是解析或格 式化过程并不是这个模式的一部分,而这个过程决定了解释器如何将要去应用并 实施这个变换。 java.util.pattern java.tex t.normal izer java.text.format 类的所冇了类 javax.el.elreso

11、lver 类的所有子类迭代模式特点:行为方法连续地返回队列屮的相同对象的不同实例。 java.util.iterator 类的所冇实现(java.util.scanner 也类似) java.util.enumeration 类的所有实现中介者模式 特点:行为方法接受一个不同的抽象类或接口的实例(一般使用命令模式)作为 参数,而这个参数同时也代理了其它给定抽象类或接口的实例。 java.util.timer 所冇的 schedulexxx()方法 java.util.concuitent.executor#execute() java.util.concuitent.executorservi

12、ce 的 invokexxx()与 submit()方法 java.util.concurrent.scheduledexecutorservice 所有 schedulexxx()方法 java.lang.reflect.method #in voke()备忘模式特点:行为方法在内部改变整个实例的状态。 java.util.date (setter方法就是典型的例子,dnte对象在内容是用一个long值來表示 的) java.io.serializable 的所冇实现 ponent.stateholder 的所有实现观察者(发布/订阅)模式特点:行为方法根据英自身的状态,去调用另一个抽彖类或

13、接口实例的方法。 java.util.observer/java.util.observable 在实际中川的比较少 java.util.eventlistener的所有实现(几乎对所以swing对彖都适用) javax.servlet.http.httpsessionbindinglistener http:/docs.oracle.eom/javaee/6/apiyjavax/servlet/http/httpsessionattributelistener.html javax.faces.event.phaselistener状态模式特点:行为方法根据它能够控制的状态来变自身的行为。

14、javax.faces.lifecycle.lifecycle#execute()由 facesservlet 控制,它的行为依赖与当前 jsf 的生命周期所处的阶段策略模式特点:在一个抽象类或接口的行为方法会调用作为i种策略实现而通过参数传入 的另一个抽象类或接口实例的方法。 java.utilcomparator#compare(),这个方法被 collections#sort()所调用 javax.scrvlct.http.httpscrvlct 类中的 service。与所冇的 doxxx()方法接受 httpserxdetrequest与httpservletresponse这两个参

15、数(并不是通过像成员变最这种 方式容纳它们),这样其所有子类都必须去处理它们 javax.servlet.filter#dofilter()模板方法模式特点:具冇由抽彖类型定义默认行为的行为方法。 java.io.lnputstream、java.io.outputstream> java.io.reader 与 java.io.writer 类的所有非 抽彖方法 java.util.abstractlist> java.util.abstractset> java.util.abstractmap 的所有非抽象方法 javax.scrvlct.http.httpscrvlct 类的所冇 doxxx()方法默认发送 http 405“方法不允许” 这个错误给response,你可以白由地选择是否去实现它们访问者模式特点:出两个不同的抽象类或接口,它们都有接受对方做参数的方法,被调用的 方法会去调用另一个对象的方法,然后根据制定好的策略执行。 javax.lang.model.element. annotation value l a

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论