JDK设计模式(十六)责任链模式

1、概述 责任链模式避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。 2、解决的问题 如果有多个对象都有可能接受请求,可以避免请求发送者与接收者耦合在一起。 3、模式中的角色 1、抽象处理者角色(Handler): 定义一个处理请求的接口,和一个后继连接(可选) 2、具体处理者角色(ConcreteHandler): 处理它所负责的请求,可以访问后继者,如果可以处理请求则处理,否 ...

JDK设计模式(十五)迭代器模式

1. 概述 迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。 2. 解决的问题 把游走的任务放在迭代器上,而不是聚合上,这样简化了聚合的接口和实现,也让责任各得其所。 3. 模式中的角色 1、抽象迭代器(Iterator):定义出遍历元素所需的接口。 2、具体迭代器(ConcreteIterator):实现Iterator接口,并保持迭代过程中的游标位置。 3、聚集(Aggregate):给出创建迭代器(Iterator)对象 ...

JDK设计模式(十四)观察者模式

1. 概述 有时被称作发布/订阅模式,观察者模式定义了对象之间的一对多的依赖关系,这样一来,当一个对象改变状态时,它的所有依赖着都会收到通知并自动更新。 2. 解决的问题 将一个系统分割成一个一些类相互协作的类有一个不好的副作用,那就是需要维护相关对象间的一致性。我们不希望为了维持一致性而使各类紧密耦合,这样会给维护、扩展和重用都带来不便。观察者就是解决这类的耦合关系的。 3. 模式中的角色 1、抽象主题(Subject):它把所有观察者对象的引用保存到一个聚集里, ...

JDK设计模式(十三)模板方法模式

1、概述 定义一个操作中的算法的骨架,而将步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义算法的某些特定步骤。 2、模式中的角色 抽象模板类(AbstractTemplate):实现了模板方法,定义了算法的骨架。 具体模板类(ConcreteTemplate):实现抽象类中的抽象方法,已完成完整的算法。 3、模式解读 模板方式模式的类图如下所示 模板方法中的方法可以分为两大类:模板方法和基本方法。 模板方法,一个模板方法是定 ...

JDK动态代理和CGLib代理实现分析

1、JDK动态代理 JDK的动态代理主要涉及到java.lang.reflect包中的两个类:Proxy和InvocationHandler。 其中 InvocationHandler是一个接口,可以通过实现该接口定义横切逻辑,在并通过反射机制调用目标类的代码,动态将横切逻辑和业务逻辑编织在一 起。 而Proxy为InvocationHandler实现类动态创建一个符合某一接口的代理实例。 InvocationHandler接口: public interface Inv ...

类加载器

java类加载器,主要有系统加载器、当前加载器、线程上下文加载器 线程上下文加载器 一般来说,这个问题都来自于框架编程过程中需要动态的加载资源。一般来说,加载一个资源的时候,你会有至少有三个ClassLoader可以用来加载资源,系统ClassLoader(AppClassLoader),当前ClassLoader(可以理解为加载了当前Class的ClassLoader,比如你编写并部署在servlet容器中的程序,它使用WebAppClassLoader)和线程上下文ContextCl ...

内存泄露排查

现象: (1)数据导出无反应,处于等待状态 (2)其他页面相应特别慢 1、查看日志 [/enroll2//dataExport/create.json?_input_charset=UTF-8&filter_nature_group_id=36&filter_nature_topic_id=279&filter_nature_member_id=&filter_common_login_id=&fi ...

深入理解jvm虚拟机

每个Java开发者都知道Java字节码是执行在JRE((Java Runtime Environment Java运行时环境)上的。JRE中最重要的部分是Java虚拟机(JVM),JVM负责分析和执行Java字节码。Java开发人员并不需要去关心JVM是如何运行的。在没有深入理解JVM的情况下,许多开发者已经开发出了非常多的优秀的应用以及Java类库。不过,如果你了解JVM的话,你会更加了解Java的,并且你会轻松解决那些看似简单但是无从下手的问题。 本系列主要从以下几个方面进行分 ...