浅谈单例模式及其java实现
? 单例模式是23种设计模式中比较简单的一种,在此聊一下单例模式。 1.什么是设计模式?? 对于没有接触过设计模式的人来说,一听到设计模式这四个字就觉得这个东西很高深莫测,一下子就对这个东西产生了恐惧感,其实设计模式是那些大佬在项目经验中领悟出来并总结出来的套路,这些套路能够用于应对项目开发中的特定问题,所以设计模式并不可怕(其实心里慌得一批。。。)。设计模式一共有23种,根据用途来分类,可分为三类:
2.单例模式的作用保证一个类只有一个实例,并且提供访问该实例的全局访问点 3.单例模式的应用场景
4.单例模式的实现方式(java)4.1 饿汉式1 package Singleton; 2 /** 3 * 饿汉式单例模式 4 * @author cjj 5 */ 6 public class Singleton01 { 7 //在静态属性中创建实例 8 private static Singleton01 instance=new Singleton01(); 9 //私有化构造器 10 private Singleton01() {} 11 //返回实例 12 public static Singleton01 getInctance() { 13 return instance; 14 } 15 } 为啥这种实现方式成为饿汉式呢?因为这种实现方式是在静态属性中创建实例的,静态属性在类加载的时候就已经创建好实例了,这个时候还没有开始调用,所以很形象地称之为饿汉式实现(手动狗头程序员并不都是无趣的动物。。。)。 4.2 懒汉式1 package Singleton; 2 /** 3 * 懒汉式单例模式 4 * @author cjj 5 * 6 */ 7 public class Singleton02 { 8 //私有化构造器 9 private Singleton02() { 10 } 11 private static Singleton02 instance; 12 public static synchronized Singleton02 getInstance() { 13 if(instance!=null) { 14 instance=new Singleton02(); 15 } 16 return instance; 17 } 18 } 饿汉式的鲜明对比是懒汉式,这种实现方式是在调用时才创建实例。用买车票的比喻来说明这两种实现方式,饿汉式是属于那种第二天才出行,它在前一天就已经预定好车票了,而懒汉式这个家伙呢,在汽车出发前一分钟才买好票。 4.3 静态内部类创建实例1 package Singleton; 2 3 /** 4 * 用静态内部创建实例 5 * @author cjj 6 * 7 */ 8 public class Singleton04 { 9 10 //用静态内部类来创建实例 11 static class SingleInstance{ 12 public static final Singleton04 instance=new Singleton04(); 13 } 14 //私有化构造器 15 private Singleton04() {} 16 //返回实例 17 public static Singleton04 getInstance() { 18 return SingleInstance.instance; 19 } 20 21 } 这种实现方式结合了饿汉式和懒汉式两种方法的优点,即调用时加载类(静态内部类)并创建实例。 4.4枚举型创建单例1 package Singleton; 2 3 public enum Singleton05 { 4 INSTAANCE; 5 public void Operation() { 6 7 } 8 } 这种创建方式简单明了,在枚举类中设计就只有一个实例INSTAANCE,然后添加单例的操作就可以了,补充一下枚举型本质上也是属于一种类,每个枚举型都继承于java.lang.Enum<>类,所以枚举型也可以有成员方法的。这种方法避免了运用反射调用私有构造器来创建实例。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- java – 亚马逊的S3能否以日期顺序返回对象摘要?
- Java Robot应用示例之机器人功能
- 在Glassfish4 Java EE应用程序中使用ServiceLoader时出现Cl
- java利用htmlparser获取html中想要的代码具体实现
- java – 检查JUnit Extension是否抛出特定的Exception
- Java 线程池框架核心代码分析--转
- 让Spark,Java和MongoDB协同工作
- java – 使用Ant构建一个包含ActionbarSherlock作为库项目的
- java – 不可重复读取与脏读取之间的差异
- java – Logger slf4j没有使用logback配置的级别