多语言展示
当前在线:1228今日阅读:23今日分享:25

java设计模式之单例模式(饿汉式与懒汉式)

java设计模式之单例模式(饿汉式与懒汉式),属于创建性模式。
工具/原料
1

eclipse

2

java

方法/步骤
1

单例模式的核心作用是保证一个类只有一个实例,并且提供一个访问该实例的全局访问点。比如数据库连接池的设计一般是采用单例模式,因为数据库连接是一种数据库资源。

2

单例模式的优点:1、由于单例模式只生成一个实例,较少了系统开销,当一个对象的产生的产生需要比较多的资源时,如读取配置、产生其他依赖对象是,则可以通过在应用启动时直接产生一个单例对象,然后永久驻留内容的方式来解决。2、单例模式可以在系统设置全局的访问点,优化共享资源访问,例如可以设计一个单例类,负责所有数据表的映射处理。常用的五种单例模式实现方式:

3

饿汉式单例实现(单例对象立即加载),单例需要把构造器私有,提供一个开放的方法给外部调用。package com.gwolf.design;/** * 饿汉式单例模式 * */public class Singleton {        private static Singleton  singleton = new Singleton();                private Singleton() {                        }                public static Singleton getInstance() {                return singleton;        }                public static void main(String[] args) {                Singleton s = Singleton.getInstance();                Singleton s1 = Singleton.getInstance();                                System.out.println(s == s1);        }}

4

饿汉式单例模式代码中,static变量会在类加载时初始化,此时也不会涉及多个线程对象访问该对象的问题。虚拟机保证只会装载一次该类,肯定不会发生并发访问的问题,因此,可以省略synchronized关键字。但是有一个问题:如果只是加载本类,而不是要调用getInstance(),设置永远没有调用,则会造成资源浪费!

5

懒汉式单例模式的实现(单例对象延迟加载),它的优点是真正使用的时候才加载,它的问题是每次调用getInstance()方法都要同步,并发效率较低。package com.gwolf.design;/** * 懒汉式单例模式 * */public class LazySingleton {        private static LazySingleton  singleton;                private LazySingleton() {                        }               public static synchronized LazsynchronizedySingleton getInstance() {                if(singleton==null) {                        singleton = new LazySingleton();                }                                return singleton;        }                public static void main(String[] args) {                LazySingleton s = LazySingleton.getInstance();                LazySingleton s1 = LazySingleton.getInstance();                                System.out.println(s == s1);        }}

6

运行单例模式代码,查看对象是否是同一个。

推荐信息