原帖:http://stackoverflow.com/questions/1673841/examples-of-gof-design-patterns

提问:我正在学习GoF的《设计模式》,想了解些它们在实际中的应用的样例。

大家能给我举一些使用设计模式的好样例吗?尤其是在Java类库中。

获得赞同最高的回答:

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

创建型设计模式

抽象工厂模式

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

生成器模式

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

工厂方法模式

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

原型模式

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

单例模式

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

结构型模式

适配器模式

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

桥接模式

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

  • 临时没有想到。一个能够想到的样例是new LinkedHashMap(LinkedHashSet, List)。这种方法返回一个不可改动的linkedMap。它就没有拷贝參数中的元素(item),而是直接使用它们。java.util.Collections#newSetFromMap()singletonXXX()方法也与之类似。

组合模式

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

装饰模式

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

外观模式

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

享元模式

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

代理模式

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

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

行为模式

职责链模式

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

命令模式

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

解释器模式

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

迭代模式

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

中介者模式

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

备忘模式

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

观察者(公布/订阅)模式

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

状态模式

特点:行为方法依据它可以控制的状态来变自身的行为。

策略模式

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

模板方法模式

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

訪问者模式

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

參考翻译:

http://www.importnew.com/12526.html

java类库中的设计模式的更多相关文章

  1. 谈谈Java常用类库中的设计模式 - Part Ⅰ

    背景 最近一口气看完了Joshua Bloch大神的Effective Java(下文简称EJ).书中以tips的形式罗列了Java开发中的最佳实践,每个tip都将其意图和要点压缩在了标题里,这种做法 ...

  2. JAVA IO中的设计模式

    在java语言 I/O库的设计中,使用了两个结构模式,即装饰模式和适配器模式.       在任何一种计算机语言中,输入/输出都是一个很重要的部分.与一般的计算机语言相比,java将输入/输出的功能和 ...

  3. 谈谈Java常用类库中的设计模式 - Part Ⅱ

    概述 本系列上一篇:建造者.工厂方法.享元.桥接 本文介绍的设计模式(建议按顺序阅读): 适配器 模板方法 装饰器 相关缩写:EJ - Effective Java Here We Go 适配器 (A ...

  4. java开发中的设计模式

    http://www.cnblogs.com/maowang1991/archive/2013/04/15/3023236.html 一.设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五 ...

  5. Java Web中MVC设计模式与IOC

    MVC是由Model(模型).View(视图).Controller(控制器)三个模块组成 视图:用于做数据展示以及和用户交互的一个界面(html页面) 控制层:能够接受客户端的请求,具体的业务功能还 ...

  6. 【Java心得总结六】Java容器中——Collection

    在[Java心得总结五]Java容器上——容器初探这篇博文中,我对Java容器类库从一个整体的偏向于宏观的角度初步认识了Java容器类库.而在这篇博文中,我想着重对容器类库中的Collection容器 ...

  7. JAVA项目中常用的异常处理情况总结

    JAVA项目中常用的异常知识点总结 1. java.lang.nullpointerexception这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用 ...

  8. java类库字符串操作

    在java类库中,java给我们提供了字符串几个特别的操作,分别是String,Stringbuffer,Stringbuilder等.下面就对这几个类做一个简单的介绍.首先,我们先了解一下Strin ...

  9. JAVA项目中常用的异常知识点总结

    JAVA项目中常用的异常知识点总结 1. java.lang.nullpointerexception这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用 ...

随机推荐

  1. 论文笔记《Fully Convolutional Networks for Semantic Segmentation》

    一.Abstract 提出了一种end-to-end的做semantic segmentation的方法,也就是FCN,是我个人觉得非常厉害的一个方法. 二.亮点 1.提出了全卷积网络的概念,将Ale ...

  2. Python之文件操作:文件、目录的操作

    一.创建 1.创建文件 open(path,'w') 2.创建目录 (1)os.mkdir(pt[, mode=0777]) 新建一个目录pt,参数mode表示生成的目录的权限,默认是超级权限,也就是 ...

  3. 【07】react 之 生命周期

    阅读目录(Content) 实例化 getDefaultProps getInitialState componentWillMount render componentDidMount 存在期 co ...

  4. 支线剧情(bzoj 3876)

    Description [故事背景] 宅男JYY非常喜欢玩RPG游戏,比如仙剑,轩辕剑等等.不过JYY喜欢的并不是战斗场景,而是类似电视剧一般的充满恩怨情仇的剧情.这些游戏往往 都有很多的支线剧情,现 ...

  5. BitmapData处理图像例子【逆反处理】

    原文发布时间为:2009-01-16 -- 来源于本人的百度文章 [由搬家工具导入] using System;using System.Collections.Generic;using Syste ...

  6. 先将Excel导入到gridview再添加进数据库【Excel批量添加】

    原文发布时间为:2008-10-27 -- 来源于本人的百度文章 [由搬家工具导入] 前台: <%@ Page Language="C#" AutoEventWireup=& ...

  7. 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---52

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:

  8. Cryptography I 学习笔记 --- 零碎

    1. KDF(密钥推导函数,key derivation function),根据用户输入的一个初始密钥来生成一系列的后续密钥.可以使用PRF来生成 2. 可以用salt与slow hash func ...

  9. Codeforces 632F Magic Matrix(bitset)

    题目链接  Magic Matrix 考虑第三个条件,如果不符合的话说明$a[i][k] < a[i][j]$ 或 $a[j][k] < a[i][j]$ 于是我们把所有的$(a[i][j ...

  10. codevs——1010 过河卒(棋盘DP)

    2002年NOIP全国联赛普及组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description 如图,A 点有 ...