0%

定义

迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而不暴露其内部的表示。
                                                                                                                ——《Head First 设计模式》

阅读全文 »

定义

模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
                                                                                                                ——《Head First 设计模式》

也就是说,模板方法是在一个方法中定义了整个流程,其中部分流程是在本类实现的,部分流程是需要由具体的子类实现的。

阅读全文 »

定义

外观模式提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。
                                                                                                                ——《Head First 设计模式》

外观模式并没有“封装”子系统,只是额外增加一个类,在类中提供简化的接口完成对子系统中某些功能的实现,在提供简化接口的同时,并没有限制对子系统的访问,其依然将系统完整的功能暴露出来,供有需要的程序采用比较负载的方式访问子系统。

阅读全文 »

定义

适配器模式将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。
                                                                                                                ——《Head First 设计模式》

也就是说,适配器模式是让适配类在目标类和被适配者类中间做一个桥梁的转换,在不改变适目标类和被适配者类代码的情况下让两者可以互相调用。和命令模式的“中介”作用有点类似,甚至在实现上可以说命令模式的一部分功能是用适配器模式实现的(后续分析),但是从目的上来讲两者还是有差别的,命令模式是对“请求”的封装,让调用者对实现者无感知,而适配器模式是对接口的转换,是为了在让接口不变的情况下能够通信。

适配器有两种,一种是对象适配器,一种是类适配器。

阅读全文 »

定义

命令模式将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。
                                                                                                                ——《Head First 设计模式》

也就是说,命令者模式是让命令对象充当调用者(请求命令方)和接收者(执行命令方)中间的桥梁,调用者(请求命令方)拥有一个命令对象,命令对象拥有一个接收者(执行命令方),当调用者需要调用接收者的命令时,不是直接调用接收者,而是先通过调用命令对象的接口,由命令对象去内部的逻辑去调用接收方相应的操作,从而完成整个过程。因为命令对象的存在,调用者不需要知道接收者提供的接口,甚至可以无视接收者,因为调用者只和命令对象打交道。通过命令对象的隔离,可以使调用者和接收者进行解耦,后续接收者发生相应的变动也对调用者无感知。

阅读全文 »

定义

单例模式是用得比较多的一种设计模式,也是开发人员最熟悉的一种模式,其表示一个类只有一个实例对象,在《Head First 设计模式》中,其定义如下

单例模式确保一个类只有一个实例,并提供一个全局访问点。
                                                                                                         ——《Head First 设计模式》

单例有多种写法,本文主要描述单类加载器下常见的几种写法。

阅读全文 »

概述

工厂模式主要是将创建对象这一个步骤进行封装,从而将客户程序从具体类中解耦。工厂模式主要有三种:简单工厂、工厂方法模式、抽象工程模式。

阅读全文 »

定义

装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方法。
                                                                                                          ——《Head First 设计模式》

也就是说,装饰者模式是对原有功能类增加一些新的功能(行为)。但是为原有功能类增加新的功能行为,继承或组合也能做法,为什么要使用装饰者模式呢?这是因为要对原有功能类动态地同时增加多个功能行为(包括相同行为或不同行为),单独使用继承或组合实现将产生大量的子类(“类爆炸”),而使用装饰者模式则可以在保持良好的扩展性的同时避免“类爆炸”情况的出现。

阅读全文 »

概述

在部分程序中,需要进行性能调优,此时需要改变java虚拟机的各个内存区域的默认大小或改变垃圾回收器的策略,而这需要通过改变java虚拟机参数来完成。本文主要记录其中几个常用的参数。

阅读全文 »

概述

在java虚拟机中,其将内存区域划分为:程序计数器、java虚拟机栈、本地方法栈、方法区、堆。这些不同的数据区域存放者不同的数据类型,也拥有不同的作用。其中方法区和堆是线程共享的,程序计数器、java虚拟机栈、本地方法栈是线程私有的。其关系大致如下图所示(图中区域大小并不表示内存中真正的大小)

阅读全文 »