前言:
单例模式是设计模式中最简单的模式。关于单例模式的优点这里也不再赘述。重点看一下懒汉模式,饿汉模式以及静态内部类模式的一个具体应用。这里每个单例模式都有一个静态方法来计算矩形的面积。
一:懒汉模式
/**
* Note: This is a lazy mode for Single Pattern.
* @author mcry416
*
*/
public class CaculateRectangleAreaLazy {
// In inner to create an instance.
private static CaculateRectangleAreaLazy instance = null;
// Private constructor. Can not visit it from outside.
private CaculateRectangleAreaLazy(){
}
// Provide a public static method to visit for outside.
public static CaculateRectangleAreaLazy getInstance(){
if(instance == null){
return new CaculateRectangleAreaLazy();
}
return new CaculateRectangleAreaLazy();
}
// Caculate the rectangle's area.
public static void getRectangleArea(int x, int y){
System.out.println("Rectangle Area is: " + (x * y));
}
}
说明:这里的懒汉模式是指当使用时才去实例化,系时间换空间的思想。
二:饿汉模式
public class CaculateRectangleAreaHunger {
// Create an instance directly.
private static CaculateRectangleAreaHunger instance = new CaculateRectangleAreaHunger();
// Private constructor. Can not visit it from outside.
private CaculateRectangleAreaHunger(){
}
// Return an instance directly.
public static CaculateRectangleAreaHunger getInstance(){
return instance;
}
public static void getRectangleArea(int x, int y){
System.out.println("Rectangle Area is: " + (x * y));
}
}
说明:这里的饿汉模式是指调用时即实例化,系空间换时间的思想。
三:静态内部类模式
public class CaculateRectangleAreaHolder {
private static class InnerHolder{
private static CaculateRectangleAreaHolder instance = new CaculateRectangleAreaHolder();
}
private CaculateRectangleAreaHolder(){
}
public static CaculateRectangleAreaHolder getInstance(){
return InnerHolder.instance;
}
// Caculate the rectangle's area.
public static void getRectangleArea(int x, int y){
System.out.println("Rectangle Area is: " + (x * y));
}
}
说明:这里采用静态内部类,通过JVM来确保其为线程安全类型。