装饰器模式装饰器模式就是动态地给一个对象添加一些额外的职责,扩展对象的功能.对于增加功能来说,装饰器模式比生成子类更为灵活. 装饰器模式的结构通常来说,给一个对象添加一些额外的功能,可以通过继承来实现,但是这并不能动态地给对象添加职责,如果要添加一些职责,只能改变原有对象. 这时候就需要有装饰器模式出现了. 装饰器模式并不是利用继承和多态来扩展和复用功能,是基于对象组合的方式 . 装饰器模式的角色有: 抽象的对象角色 给出一个抽象接口,以规范准备接受附加功能的对象 具体的被装饰者 一个将要接受附加功能的具体实现,就是被装饰者,需要实现抽象的对象接口 装饰抽象类 持有一个 ...
HashMap源码阅读
HashMapjava.util包下面的工具类,键值对存储数据.通过对键值计算hash值,来存储到对应的位置.jdk1.8中底层使用数组加链表实现.键值对通过一个内部类的Node节点来表示.采用链地址法解决hash冲突,如果一条链上的节点超过给定阈值会变为红黑树.默认为8.在hashmap中是可以存储空key和value的.如果为空,则位置为0. 声明hashmap继承了AbstractMap类,实现Map接口和克隆接口.public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V ...
java注解
前言这两天在自己学习着写一个小型的web框架,有点像spring,但是有是轻量级的.里面用到的注解功能.但是对于自定义注解这块又不熟悉,所以专门学习了一波,做点笔记记下来. 概述注解是自带的.jdk中本身就有很多内置注解,比如override等等.注解的功能其实就是为一些加了注解的类,方法等赋予一些特别的含义.java中有4中元注解@Target中的参数表示注解应该用在什么地方,参数类型有 TYPE 类,接口(包括注解类型)或enum类型 FIELD 声明在字段上(包括enum实例) METHOD,声明在方法上 PARAMETER,声明参数 CONSTRUCTOR,构造器的声明 LOCA ...
责任链模式
责任链模式有多个对象, 每个对象都持有下一个对象的引用,这样就会形成一条责任链,请求在这条链上进行传递,知道某一对象决定处理该请求.但是发出者并不知道那个对象处理的请求.责任链模式的好处就是在隐瞒客户端的情况下,对系统进行动态的调整.类结构图三个继承了Handle的类组成了一个责任链,每个对象获取请求后都会看自己是否能处理,不能处理则放在最顶端. handle抽象类public abstract class Handle { protected Handle successor; void SetSuccessor(Handle successor){ ...
Java 8元空间
Java 8元空间今天想要测试方法区空间溢出会怎么样,然后调试了半天.使用String,静态变量,发现最后都是heap space OOM,经过一番学习,发现一些Java 8 中的一些改变.记录一下.在java 8中方法区也就是永久代已经是不存在了,出现了一个替代者:元空间. 元空间Java 8Hotpot JVM开始使用本地化的内存存放类的元数据,这个空间也叫作元空间(Metaspace).它存储在native heap中,不受jvm内存限制,仅仅只受本地内存的限制.Java Hotpot明确了元数据空间从操作系统请求空间,然后将其分成块.每个类加载器有一个块.类加载器从其块中为元数据分配空 ...
建造者模式
建造者模式就是讲一个复杂对象的构建与它的表示分离,是的同样的构建过程可以创建不同的表示.如果我们使用了建造者模式,用户只需要指定需要构造的类型就可以得到它们,而具体建造的过程和细节就不需要知道.在这里建造者类是为了表示要建造的对象的不同种类.通过多个建造类可以实现建造一个种类的不同对象.指挥者主要是为了防止在建造的时候出错,因为建造的时候可能会有很多步骤或者顺序,防止步骤缺失或者顺序相反.起到一个管理的作用 举例: 要建造的对象:public class Person { private String head; private String body; pri ...
策略模式
策略模式策略模式就是定义一系列的算法,并且将算法封装起来,使他们可以相互替换,并且算法的替换不会使用客户端,需要设计一个接口,为一系列实现提供一个统一的方法,多个实现类实现该j接口,设计一个抽象类,提供辅助函数.从概念来看,所有的算法完成的都是相同的工作,只是实现不同.在一个上下文中完成对算法的改变,每次要新增一个算法只需要在新增一个实现类就可以 具体例子: 抽象接口:封装了算法对外的同意接口public interface Sort { public void sort(int[] arr) ;} 具体实现类:public class QuickSort impl ...
工厂方法模式
工厂方法模式在简单工厂模式中有个坏处就是,类的创建需要依赖工厂,也就是说如果要扩展类的功能需要对工厂类进行修改,这违背了开闭原则,所以从设计考虑,有一定问题.所以有了工厂方法模式,创建一个工厂接口和多个工厂实现类,这样一旦需要增加新的功能,直接增加工厂类就可以了,不需要修改以前的代码,只需要在添加一个工厂类.符合开闭原则.举例: 类接口:public interface Sender { public void send();} 实现类:public class MailSender implements Sender { @Override p ...