设计模式之单例模式

来源:互联网 发布:中国的顶级域名 编辑:程序博客网 时间:2024/05/29 18:04

设计模式
(是一套被反复使用,多人熟知的,经过分类编目的,代码设计经验的总结)

目的:
使用设计模式是为了可重用代码,让代码更容易被他人理解,保证代码的可靠性。

什么是单例模式:(一个国家只能有一个皇帝,如果有多个就会导致很多问题。。。)

有些对象我们只需要一个就足够了,比如:
配置文件,工具类,线程池,缓存,日志对象等等。。。如果创造出多个实例,那么多个实例去读取同一个配置文件等,就会导致很多问题,比如占用资源过多,结果不一致等等。

那么我们就该思考怎么保证整个应用中某个实例有且只有一个?—>单例模式

常用的两种单例模式:饿汉模式,懒汉模式。

package com.danli;/* * 单例模式:Singleton * 应用场合:有些对象我们只需要一个就足够了,比如古代皇帝,我们现在的老婆。。。 * 作用:保证整个应用中某个实例有且只有一个 * 类型:饿汉模式,懒汉模式 */public class Singleton {    //修改默认的构造方法,改为私有的private,不允许外部直接创建对象    private Singleton(){    }    //创建类的唯一实例,使用private(私有的),static(静态的)修饰    private static Singleton instance = new Singleton();    //提供一个用于获取实例的方法    public static Singleton getInstance(){        return instance;    }}
package com.danli;/* * 单例模式:Singleton2 * 应用场合:有些对象我们只需要一个就足够了,比如古代皇帝,我们现在的老婆。。。 * 作用:保证整个应用中某个实例有且只有一个 * 类型:饿汉模式,懒汉模式 */public class Singleton2 {    //1,将构造方法私有化,不允许外部直接访问    private Singleton2(){    }    //2,声明类的唯一实例,使用private static修饰,并没有去实例化(也就是没有new)    private static Singleton2 instance;    //3,提供一个用于获取实例的方法,使用public static修饰    public static Singleton2 getInstance(){        if(instance==null){            instance = new Singleton2();        }        return instance;    }}
package com.danli;public class Test {    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不是是同一个实例");        }        //懒汉模式        Singleton2 s3 = Singleton2.getInstance();        Singleton2 s4 = Singleton2.getInstance();        if(s3 == s4){            System.out.println("s3和s4是同一个实例");        }else {            System.out.println("s3和s4不是是同一个实例");        }    }}

区别:
懒汉模式–>懒汉模式类加载时快,运行获取对象慢(线程不安全)
饿汉模式–>饿汉模式类加载时慢,运行获取对象快(线程安全)

0 0
原创粉丝点击