- 设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案
单例模式
- 目的:是的类的一个对象成为该类系统中的唯一实例
- 定义:一个列有且仅有一个实例,并且自行实例化向整个系统提供
- 要点
- 某个类只能有一个实例
- 必须自行创建实例
- 必须自行向整个系统提供这个实例
- 实现:
- 只提供私有的构造方法
- 含有一个该类的静态私有对象
- 提供一个静态的公有方法用于创建、获取静态私有对象
- 要点
单例模式实现方案
- 饿汉式:对象创建过程中实例化
- 在类加载的时候就创建实例
- 线程安全的
- 懒汉式:静态公有方法中实例化
- 第一次使用时进行实例化
- 存在线程风险
//饿汉式:对象创建过程中初始化
//空间换时间,速度快,占用空间大
public class SingletonOne {
//1.需要创建类中的私有构造
private SingletonOne(){
}
//2.创建一个该类型的私有的静态实例
private static SingletonOne instace = new SingletonOne();
//3. 对外提供一个公有的静态方法返回静态实例对象
public static SingletonOne getInstace() {
return instace;
}
}
//懒汉式:静态公有方法中实例化,第一次调用getInstace方法的时候才会进行初始化
//用时间换空间,
public class SingletonTwo {
//1.创建私有构造方法
private SingletonTwo() { }
//2. 创建私有静态的该类实例对象
private static SingletonTwo instace = null;
//3.创建开放的静态方法提供实例对象
public static SingletonTwo getInstace()
{
if (instace == null){
instace = new SingletonTwo();
}
return instace;
}
}
测试:如下
public class Test {
public static void main(String[] args) {
SingletonOne instace = SingletonOne.getInstace();
SingletonOne instacetwo = SingletonOne.getInstace();
System.out.println(instace);
System.out.println(instacetwo);
SingletonTwo one = SingletonTwo.getInstace();
SingletonTwo two = SingletonTwo.getInstace();
System.out.println(one);
System.out.println(two);
}
}
结果:
com.sinmu.singleton.SingletonOne@16b98e56
com.sinmu.singleton.SingletonOne@16b98e56
com.sinmu.singleton.SingletonTwo@27d6c5e0
com.sinmu.singleton.SingletonTwo@27d6c5e0