单例模式:
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法)
单例模式的八种方式
1).饿汉式(静态常量)
2).饿汉式(静态代码块)
3).懒汉式(线程不安全)
4).懒汉式(线程安全,同步方法)
5).懒汉式(线程安全,同步代码块)
6).双重检查
7).静态内部类
8).枚举
1. 懒汉式单例
package com.China.singleton.example1;
/**
* 懒汉式单例
*/
public class Singleton {
// 定义一个变量,存储创建好的类实例
private static Singleton uniqueInstance = null;
// 私有化构造方法
private Singleton(){
}
// 为客户端提供类实例
public static synchronized Singleton getInstance(){
if(uniqueInstance == null){
uniqueInstance = new Singleton();
}
return uniqueInstance;
}
public void singletonOperation(){
// 功能处理
}
/**
* 单例可以拥有自己的属性
*/
private String singletonData;
/**
* 让外部通过这些方法来访问属性的值
*/
public String getSingletonData(){
return singletonData;
}
}
2. 饿汉式单例
package com.China.singleton.example2;
/**
* 饿汉式单例
*/
public class Singleton {
// 直接创建类实例,只会创建一次
private static Singleton uniqueInstance = new Singleton();
private Singleton(){
}
public static Singleton getInstance(){
return uniqueInstance;
}
public void singletonOperation(){
// 功能处理
}
/**
* 单例可以拥有自己的属性
*/
private String singletonData;
/**
* 让外部通过这些方法来访问属性的值
*/
public String getSingletonData(){
return singletonData;
}
}
如何获取缓存基本思路
package com.China.singleton.example5;
import java.util.HashMap;
import java.util.Map;
public class JavaCache {
/**
* 缓存数据的容器
*/
private Map<String, Object> map = new HashMap<String, Object>();
public Object getValue(String key){
// 先从缓存中取值
Object obj = map.get(key);
// 判断缓存里面是否有值
if(null == obj){
obj = key+",value";
map.put(key, obj);
}
return obj;
}
// 1.定义一个存放缓存数据的容器
// 2. 从缓存中获取数据的做法
// 2.1 先从缓存里面取值
// 2.2 判断缓存里面是否有值
// 2.3 如果有值,就直接使用这个值
// 2.4 如果没有,那么就去获取相应的数据,或者是创建相应的对象. 并且要把获取的数据放到缓存中
}