设计模式在jdk中的应用

前言

最近重学设计模式,而且还有很多源码要看。所以就想一举两得。从源码中寻找设计模式。顺便还可以看看源码。。。
本文只是寻找设计模式在java中的应用。优缺点就不细说了。而且也不可能将jdk中所有涉及设计模式的例子都举出来。希望大家积极评论。来补全这一块

工厂模式

jdk中的应用

java.sql包
线程池

解释和代码

线程池中有线程创建工厂。应用了工厂模式

策略模式

jdk中的应用

JAVA AWT 中的 LayoutManager
Comparator

解释和代码

在集合元素的比较中,可以传入一个comparer。不同的comparer有不同的比较策略

装饰者模式

jdk中的应用

java.io包

解释和代码

装饰者模式可以动态地给一个对象增加其他职责,就扩展对象功能来说,装饰者模式比生成子类更为灵活。在由InputStream,OutputStream,Reader和Writer代表的等级结构内部,有一些流处理器可以对另一些流处理器起到装饰作用,形成新的,具有改善了的功能的流处理器。

代理模式

jdk中的应用

jdk中的Proxy类

解释和代码

Proxy类可以动态代理生成代理对象

原型模式

jdk中的应用

java的clone方法

解释和代码

原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能
clone是基于内存级别的复制。不是用构造方法。创建重复对象性能更高

模板模式

jdk中的应用

java.io.InputStream, java.io.OutputStream, java.io.Reader和java.io.Writer的所有非抽象方法
java.util.AbstractList, java.util.AbstractSet和java.util.AbstractMap的所有非抽象方法

解释和代码

父类实现关键步骤,子类实现了具体步骤

外观模式

jdk中的应用

java.lang.Class
java的三层开发模式

解释和代码

Class.forName方法生成一个Class对象。作为对对象操作的总入口。

建造者模式

jdk中的应用

java.lang.StringBuilder
java.lang.StringBuffer

解释和代码

StringBuilder和Stringbuffer可以扩展原对象不同的字符串也可以按不同的顺序拼接

观察者模式

jdk中的应用

java.util.Observer接口

解释和代码

这个接口好像我平时开发没用到。他的所有实现类都是在sun包的。

状态模式

jdk中的应用

java.util.Iterator

解释和代码

根据一个指针的状态而改变自己的行为

适配器模式

jdk中的应用

java.util.Arrays.asList()
java.io.InputStreamReader(InputStream)

解释和代码

将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
Arrays将集合转换为list。Inputstream转换成reader

备忘录模式

jdk中的应用

解释和代码

组合模式

jdk中的应用

java.util.Map#putAll(Map)
java.util.List#addAll(Collection)
java.util.Set#addAll

解释和代码

组合模式用于把一组相似的对象当作一个单一的对象。和对象组合成集合一致

迭代器模式

jdk中的应用

java.util.Iterator
java.util.Enumeration

解释和代码

提供一个一致的方法来顺序访问集合中的对象,这个方法与底层的集合的具体实现无关。

单例模式

jdk中的应用

java.lang.Runtime
。。。。

解释和代码

private static Runtime currentRuntime = new Runtime();  
public static Runtime getRuntime() {  
    return currentRuntime;  

桥接模式

jdk中的应用

java.sql.DrivenManager

解释和代码

《设计模式在jdk中的应用》
通过上图可以看出,基于JDBC的应用程序,使用JDBC的API,相当于是对数据库操作的抽象的扩展,算作桥接模式的抽象部分;而具体的接口实现是由驱动来完成的,驱动这边自然就相当于桥接模式的实现部分了。而桥接的方式,不再是让抽象部分持有实现部分,而是采用了类似于工厂的做法,通过DriverManager来把抽象部分和实现部分对接起来,从而实现抽象部分和实现部分解耦

命令模式

jdk中的应用

java.lang.Runable和线程池

解释和代码

Runnable:任务抽象,也就是“命令”;线程池通过submit,execute调用

职责链模式

jdk中的应用

jsp servlet 的 Filter

解释和代码

多个过滤器过滤,满足条件则跳转入下一个过滤器

中介者模式

jdk中的应用

线程池的executer.execute方法
我觉得mvc模式可能更好理解

解释和代码

Controller作为view和model的中介。使model和view透明化转换

享元模式

jdk中的应用

java.lang.String

解释和代码

享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。String的常量池正是如此

解释器模式

jdk中的应用

java.util.Pattern
java.text.Normalizer
java.text.Format

解释和代码

这个模式通常定义了一个语言的语法,然后解析相应语法的语句。简单地说就是规定了格式

访问者模式

jdk中的应用

javax.lang.model.element.AnnotationValue和AnnotationValueVisitor
javax.lang.model.element.Element和ElementVisitor
javax.lang.model.type.TypeMirror和TypeVisitor

解释和代码

好像都没用过。。。。以后补上

空对象模式

jdk中的应用

java.util.Collections#emptyList()
java.util.Collections#emptyMap()
java.util.Collections#emptySet()

解释和代码

一个空对象取代 NULL

    原文作者:设计模式
    原文地址: https://segmentfault.com/a/1190000015360433
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注