Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1904932
  • 博文数量: 219
  • 博客积分: 8963
  • 博客等级: 中将
  • 技术积分: 2125
  • 用 户 组: 普通用户
  • 注册时间: 2005-10-19 12:48
个人简介

文章分类

全部博文(219)

文章存档

2021年(1)

2020年(3)

2015年(4)

2014年(5)

2012年(7)

2011年(37)

2010年(40)

2009年(22)

2008年(17)

2007年(48)

2006年(31)

2005年(4)

分类: Java

2014-07-31 14:24:07

读后觉得很好,所以转载来。以下为转载正文:
-----------------------------------------------------------------------------------------------------------------------------------
本文由 - 翻译自 。欢迎加入。转载请参见文章末尾的要求。

提问:我正在学习GoF的《》,想了解些它们在实际中的应用的例子。大家能给我举一些使用设计模式的好例子吗?尤其是在Java类库中。

赞同最高的回答:

你可以通过对设计模式有个整体上的理解。Wikipedia上也提高了GoF所涉及到的模式。我这里总结一下,并且尽可能指出在JavaSE与JavaEE的API中是如何运用这些模式的。

特点:创建方法返回一个可以用来创建抽象类或接口的工厂类。

特点:创建方法返回这个实例本身。

  • 不同步
  • 同步
  • (除此之外,还有,,,,与)
  • 的所有实现

特点:创建方法返回抽象类或接口的实现。

  • 对于每个协议(protocol)返回一个单例对象

特点:创建方法返回一个同类型且具有相同属性的另一个实例。

  • (这个类必须实现)

特点:创建方法返回同一个实例(无论在何时调用)。

特点:创建方法接受一个与当前类不同的抽象类或接口的实例作为参数,返回一个经过修饰或重写给定参数实例的抽象类或接口的实现。

  • 返回一个Reader对象
  • 返回一个Writer对象

特点:创建方法接受一个与当前类不同的抽象类或接口的实例作为参数,返回一个经过代理或使用给定参数实例的抽象类或接口的实现。

  • 暂时没有想到,一个可以想到的例子是new LinkedHashMap(LinkedHashSet, List),这个方法返回一个不可修改的linkedMap,它就没有拷贝参数中的元素(item),而是直接使用它们。和方法也与之类似。

特点:行为方法把相同抽象类或接口的实例转化为一个树结构。

  • (几乎对所有的Swing都适用)
  • (几乎对所有的JSF UI都适用)

特点:创建方法以一个抽象类或接口的实例为参数,返回值是增加了额外方法的给参数实例。

  • 、、、这些类的所有子类,它们都有一个接受相同类型作为参数的构造函数。
  • 中、、方法

特点:行为方法在内部使用完全不同的抽象类或接口的实例做封装。

  • ,这个类在内部使用了抽象类或接口、、以及其他一些用户不需要关心的类(通常这些类都是可通过注入重写的)。
  • ,这个类在内部使用了、、、等。

特点:创建方法返回一个缓存的实例,与多例模式有些类似。

  • (除此之外,类似的还有、、、、)

特点:创建方法返回一个给定抽象类或接口的实例,这个实例代理或使用了这个给定抽象类或接口的另一个实现。

  • 包下的所有类

恕我直言,Wikipedia上的类子不是很好,惰性加载实际上和代理模式一点关系也没有。

特点:行为方法间接调用队列中同一抽象类或接口的另一实例的同名方法。

特点:一个抽象类或接口中的行为方法调用另一个在创建时经命令方法包装的抽象类或接口实现的另一个方法。

  • 的所有实现
  • 的所有实现

特点:行为方法返回结构上不同的抽象类或接口的实例,需要注意的是解析或格式化过程并不是这个模式的一部分,而这个过程决定了解释器如何将要去应用并实施这个变换。

  • 类的所有子类
  • 类的所有子类

特点:行为方法连续地返回队列中的相同对象的不同实例。

  • 类的所有实现(也类似)
  • 类的所有实现

特点:行为方法接受一个不同的抽象类或接口的实例(一般使用命令模式)作为参数,而这个参数同时也代理了其它给定抽象类或接口的实例。

特点:行为方法在内部改变整个实例的状态。

  • (setter方法就是典型的例子,Date对象在内容是用一个long值来表示的)
  • 的所有实现
  • 的所有实现

特点:行为方法根据其自身的状态,去调用另一个抽象类或接口实例的方法。

  • /在实际中用的比较少
  • 的所有实现(几乎对所以Swing对象都适用)

特点:行为方法根据它能够控制的状态来变自身的行为。

特点:在一个抽象类或接口的行为方法会调用作为一种策略实现而通过参数传入的另一个抽象类或接口实例的方法。

  • ,这个方法被Collections#sort()所调用
  • 类中的service()与所有的doXXX()方法接受HttpServletRequest与HttpServletResponse这两个参数(并不是通过像成员变量这种方式容纳它们),这样其所有子类都必须去处理它们

特点:具有由抽象类型定义默认行为的行为方法。

  • 、、与类的所有非抽象方法
  • 、、的所有非抽象方法
  • 类的所有doXXX()方法默认发送HTTP 405“方法不允许”这个错误给response,你可以自由地选择是否去实现它们

特点:由两个不同的抽象类或接口,它们都有接受对方做参数的方法,被调用的方法会去调用另一个对象的方法,然后根据制定好的策略执行。


原文链接: 翻译: -
译文链接:
阅读(2763) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chouy2014-07-31 14:31:30

注意,上面类的 API 都有链接,可以链到类的 JAVADOC 网页。