1.手写单例模式:
1).什么叫单例模式:
单例模式 一种非常常见的设计模式最简单一种设计模式 singleTon .
单例设计模式 主要的设计方法懒汉式、饿汉式和登记式单例
单例特点:
单例类只有一个实例
单例类必须自己创建自己的唯一的实例(只有私有构造器)
其他类的对象访问这一唯一实例的方法
总结:单例模式确保单例类只有一个唯一的实例 并且自行实例化同时向整个系统提供获取这个实例的方法
解决: 全局使用的类被频繁的创建和销毁。
2).
1. 基于之上的特性 提出一种懒汉式方式产生单例 懒汉式只是基本满足这三种特性
缺点:这种设计模式明显在多线程条件下 产生线程不安全情况在并发的条件下产生很多个单例
public class SingleTon {
private static SingleTon singleTon=null;
private SingleTon()
{
}
public static SingleTon getSIngTon()
{
if(singleTon==null)
return new SingleTon();
}
}
4).延时加载 静态内部类:类部类加载是线程安全的 只有调用 外部类的getInsatnce()方法时候才会实例化一次instance这个内部类的静态代码块一次。
Java机制 内部类Holder只有在getInsatnce()第一次调用时候才会加载 内部类加载的时候只会实例化一次instance并且是线程安全的
// 3.c采用静态类部类: Java机制 这种类部类在加载时候线程安全的 只有在加载时候实例化instance
private static class Holder{
static SingleTon instacnce=new SingleTon();
}
public static SingleTon getInstace()
{
return Holder.instacnce;
}
2. 方式采用饿汉式的单例模式 是线程安全的 不同于懒汉式单例调用方法时候才创建实例 直接创建 static 静态实例
根据Java 虚拟机特性 对于静态变量 在类加载的初始化阶段进行加载 static 成员变量在只会加载一次。 类初始化就自行实例化
private static SingleTon singleTon=new SingleTon();
private SingleTon()
{
}
public static SingleTon getSIngTon()
{
return singleTon;
}
总结:考虑都线程安全问题 一般采用饿汉式方式创建一个单例。