什么是设计模式 设计模式( Design Pattern) 是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。
使用设计模式的目的 使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。
Java设计模式有哪些 基本模式有23种:
单例模式
抽象工厂模式
建造者模式
工厂模式
原型模式
……
单例模式 在开发过程中,有些对象我们只需要一个,比如配置文件、工具类、线程池、缓存、日志对象等。 如果创造出多个实例,就会导致许多问题,比如占用过多资源,不一致的结果等
单例模式分类 常用的单例模式有两种,一种叫懒汉模式,一种叫饿汉模式。
饿汉模式 步骤 1.将构造方法私有化,不允许外部直接创建对象 2.在类内部创建
类的唯一实例,使用private static
修饰 3.提供一个用于获取实例的方法,使用public static
修饰
1 2 3 4 5 6 7 8 9 10 11 12 13 14 public class Singleton { private Singleton () { } private static Singleton instance=new Singleton (); public static Singleton getInstance () { return instance; } }
测试
1 2 3 4 5 6 7 8 9 10 11 12 13 public static void main (String[] args) { Singleton s1 = Singleton.getInstance(); Singleton s2 = Singleton.getInstance(); if (s1 == s2) { System.out.println("s1和s2是同一个实例" ); } else { System.out.println("s1和s2不是同一个实例" ); } }
运行结果
为什么叫饿汉模式 不管程序是否需要这个对象的实例,总是在类加载的时候就先创建好实例,理解起来就像不管一个人想不想吃东西,他都把吃的先买好存着,如同饿怕了一样。
懒汉模式 步骤
将构造方式私有化,不允许外边直接创建对象
在类内部声明
类的唯一实例,使用private static修饰
提供一个用于获取实例的方法,使用public static修饰。当第一个用户来获取的时候,才创建一个实例,后面就不需要创建了。1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 public class Singleton2 { private Singleton2 () { } private static Singleton2 instance; public static synchronized Singleton2 getInstance () { if (instance == null ) { instance = new Singleton2 (); } return instance; } }
测试
1 2 3 4 5 6 7 8 9 10 11 public static void main (String[] args) { Singleton2 s3 = Singleton2.getInstance(); Singleton2 s4 = Singleton2.getInstance(); if (s3 == s4) { System.out.println("s3和s4是同一个实例" ); } else { System.out.println("S3和s4不是同一个实例" ); } }
运行结果
为什么叫懒汉模式 当程序需要这个实例的时候才去创建对象,就如同一个人懒的饿到不行了才去吃东西 。
区别
饿汉模式的特点是加载类时比较慢,但运行时获取对象的速度比较快,线程安全
懒汉模式的特点是加载类时比较快,但运行时获取对象的速度比较慢,线程不安全
如果一个对象使用频率不高,占用内存还特别大,明显就不合适用饿汉式了。这时应该使用懒汉模式。
参考链接 为什么单例模式要起名叫饿汉式和懒汉式? 慕课网 单例模式