原帖: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. 【22】Vue 之 Vue Devtools

    vue安装: # 最新稳定版 $ npm install vue # 全局安装 vue-cli $ npm install --global vue-cli # 创建一个基于 webpack 模板的新 ...

  2. CODEVS【1380】没有上司的舞会

    题目描述 Description Ural大学有N个职员,编号为1~N.他们有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.每个职员有一个快乐指数.现在有个周年庆宴会 ...

  3. 【源码】List<T>泛型绑定repeater,以及repeater的交替绑定

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

  4. css3 ani-2-trans, any to transform!!! css3 animation jingsui! Hover

    http://www.daqianduan.com/example?pid=2959 animation, transition, transform or ani 2 trans

  5. [LeetCode] Search in Rotated Sorted Array II 二分搜索

    Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed? Would this ...

  6. duilib入门简明教程 -- 响应按钮事件(4) (转)

    原文转自 http://www.cnblogs.com/Alberl/p/3343610.html     上一个Hello World的教程里有一句代码是这样的:CControlUI *pWnd = ...

  7. 本机开发Native Development:Invalid path for NDK (转)

    打开window菜单下的preference选项.选择Android,Native Development(本地开发) 选择你的NDK安装目录.但是,这个插件目前仅支持ndk的r4和r5版本,更高版本 ...

  8. paramiko模块及ssh远程登陆

    ssh实现远程登陆一般有两种方式,一种就是用户密码登陆,另一种是密钥登陆(当然默认是要服务端打开ssh服务). 我这里使用这两种方法操作一下远程登陆,测试客户端是本机的root与jeff用户,远程连接 ...

  9. 谈谈JS中的原型

    不知道大家对JS中的原型理解的怎么样,我想如果大家对JS中的原型对象以及prototype属性十分熟悉的话对后面原型链以及继承的理解会十分的容易,这里想和大家分享自己对其的理解,请先看下面这段代码O( ...

  10. Netty内存池

    参考资料:http://blog.csdn.net/youaremoon/article/details/47910971 主要思想:buddy allocation,jemalloc