善用设计模式
单例模式
单例模式是设计模式中使用最为普遍的模式之一。它是一种对象创建模式,用于产生一个对象的具体事例,它可以确保系统中一个类只产生一个实例。在Java语言中,这样的行为带来两大好处:
- 对于频繁使用的对象,可以省略创建对象所花费的时间
- 由于new操作的次数减少,因而对系统内存的使用频率也会降低,这将减轻GC压力,缩短GC停顿时间
因此对于系统的关键组件和被频繁使用的对象,使用单例模式便可以有效地改善系统的性能。
单例模式的核心在于通过一个接口返回唯一的对象实例。一个简单的单例实现如下:
public class Singleton { private Singleton(){ System.out.println("Singleton is create");//创建单例的过程可能会比较慢 } private static Singleton singleton = new Singleton(); public static Singleton getInstance(){ return singleton; } }
首先单例必须要有一个private访问级别的构造函数,只有这样,才能确保单例不会在系统中的其他代码内被实例化,其次singleton成员变量和getInstance()方法必须是static的。
它唯一不足仅是无法对singleton实例做延迟加载。假如单例的创建过程很慢,而由于singleton成员变量是static定义的,因此在JVM加载单例类时,单例对象就会被建立,如果此时,这个单例类在系统中还扮演其他角色,那么任何使用这个单例类的地方都会初始化这个单例变量,而不管是否会被用到。至于单例模式的懒加载和其他更有写法有兴趣的朋友可以自行查阅其他资料。
代理模式
代理模式也是一种常见的设计模式。它使用代理对象完成用户请求,屏蔽用户对真实对象的访问。就如同现实中的代理一样。在软件设计中,使用代理模式的意图也很多,比如因为安全原因,需要屏蔽客户端直接访问真实对象;或者在远程调用中,需要使用代理类处理远程方法调用的技术细节(如RMI);也可能是为了提升系统性能,对真实对象进行封装,从而达到延迟加载的目的。