设计模式---单例模式--饿汉式和懒汉式

单例模式

单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

条件(注意)

由于单例模式是一种当其他类访问时,它是作为唯一一个实例返回的,所以在使用单例的场景中应该注意一下的问题:

  1. 单例类只能有一个实例。
  2. 单例类必须自己创建自己的唯一实例。
  3. 单例类必须给所有其他对象提供这一实例。

优点

  1. 实现单例模式的类只会生成一个实例,这有效的减少了系统的开销。
  2. 可以系统的配置全局访问点,优化环共享资源访问。

实现方式

名称 效果
饿汉式 线程安全,调用效率高,但是不能延时加载
懒汉式 线程安全,调用效率不高,但是能延时加载
双重检测锁式 由于它是运行有JVM底层内部模型原因,偶尔会出现问题,不建议使用
静态内部类 线程安全,调用效率高,可以延时加载
枚举单例 线程安全,调用效率高,不能延时加载

饿汉式

package _1;
/**
 * 
 * @author 大帅比
 *饿汉式:static,不能延时加载,线程安全,调用效率高
 *1、私有化构造方法
 *2、类初始化时就立即加载类对象
 *3、提供公开方法用于调用单例类
 *懒汉式:延时加载,线程安全,调用效率不高
 *区别:
 *在调用方法添加实例化的判断
 *方法添加 synchronized实现同步
 *双重检测锁模式(double check lock)
 *将同步锁放到判断语句中
 *synchronized(类.class){
 *
 *
 *}
 *静态内部类模式:延时加载,调用效率高,线程安全;(常用)
 *枚举单例模式
 *
 *
 *
 */
public class HungaryMan{
/**
第一步:私有化构造器
第二步:创建实例对象
第三步:通过对外接口实现实例的发送
*/
	private static HungaryMan a = new HungaryMan();
	private HungaryMan() {
	}
	public static HungaryMan rHungaryMan() {
		return a;
	} 
}

懒汉式

与饿汉式的区别仅仅在于是否即时加载,即当电脑真正使用到的时候才会加载。

public class Lazy{
/**
第一步:私有化构造器
第二步:创建实例对象
第三步:通过对外接口实现实例的发送
*/
	private static Lazy a;
	private Lazy() {
	}
	public static synchronized Lazy rLazy() {
		if(a == null){
			a = new Lazy();
		}
		return a;
	} 
}

你可能感兴趣的:(java基础学习,java,设计模式)