摘要:
中介者(Mediator) 用一个中介对象来封装(封装变化)一系列的对象交互。中介者使各个对象不需要显示的相互引用(编译时依赖 -> 运行时依赖),从而使其耦合松散(管理变化),而且可以独立的改变他们之间的交互。 动机 在软件构建的过程中,经常出现多个对象互相关联交互的情况,对象之间常常会维持一种复 阅读全文
摘要:
适配器(Adapter) 将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的。 代码 //目标接口(新接 阅读全文
摘要:
代理模式(Proxy) 在面向对象系统中,有些对象由于某种原因(比如对象创建开销很大或者某些操作需要安全控制或者需要进程外访问等),直接访问会给使用者、或者系统结构带来很多的麻烦。 为其他对象提供一种代理以控制(隔离,使用接口)对这个对象的访问。 Spring的AOP就是一种代理模式、对某个类方法进 阅读全文
摘要:
门面模式(Facade) 系统间耦合的复杂度 对于客户系统和子系统之前存在很多的耦合的情况,如果不考虑设计的情况,那么会形成A方案的情况,系统的依赖严重,维护性大大降低。 如果在客户层和子系统之间添加一层Facade,那么客户系统之和Facade打交道,子系统中也只和Facade打交道,那么在这时候 阅读全文
摘要:
享元模式(Flyweight) 运用共享技术有效地支持大量的细粒度对象 在软件系统采用纯粹对象方案的问题在于大量细粒度的对象会很快充斥在系统中,从而带来很高的运行是代价——主要指内存需求方面的代价。 主要思想其实就是设置好一个对象池,如果对象的销毁则返回到池中,需要使用对象则可以从池中获取所需要的对 阅读全文
摘要:
单例模式(Singleton) 保证一个类仅有一个实例,并提供一个该实例的全局访问点。 在软件系统中,经常有这样一个特殊的类,必须保证它们在系统中只存在一个示例,才能确保他们的逻辑正确性、以及良好的效率。 这应该是类设计者的责任,而不是使用者的责任。 懒汉式(线程不安全) public class 阅读全文
摘要:
构建器(Builder) 将一个复杂对象的构建与其表示相分离,使得同样的构建过程(稳定)可以创建不同的表示(变化) 在软件系统中,有时候面临着“一个复杂对象”的创建工作,期通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将他们组合在一起的算法却 阅读全文
摘要:
原型模式(Prototype) 使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建新的对象。 在软件系统中,经常面临着“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是他们却拥有着比较稳定一直的接口。 假设将工厂模式中的ISplitter和SplitterF 阅读全文
摘要:
TreeMap源码分析 数据结构 TreeMap使用红黑树来存储数据,红黑树是一种平衡二叉查找树,它是一种高效的搜索算法,它的算法时间复杂度是O(lgn) 增删改查 增改 public V put(K key, V value) { // 先获取根节点 Entry<K,V> t = root; // 阅读全文
摘要:
ArrayList源码分析 默认大小 // 根据传入的初始化大小创建对应的数组大小 public ArrayList(int initialCapacity) { if (initialCapacity > 0) { // 根据传入的值、创建对应的Object数组 this.elementData 阅读全文