Java 单例

来源:互联网 发布:用js做轮播图 编辑:程序博客网 时间:2024/06/03 20:50
目录   一、什么是设计模式   二、单例设计模式   三、如别保证对象唯一性   四、如何创建单例      1、饿汗式      2、懒汗式  五、如何验证对象唯一性

一、 什么是设计模式

解决某一类问题最行之有效的方法

二、单例设计模式

解决一个类在内存中只存在一个对象

三、如何保证对象唯一性

1、为了避免其他程序过多创建该类对象,先禁止其他程序创建该类对象(私有化构造函数)
2、在该类创建一个本类对象
3、本类提供一个方法获取该对象(其他程序访问该方法,该方法只能是静态的)

四、如何创建单例

1、 饿汗式

    // 私有化构造函数    private ShareInstance(){    }    //创建本类对象并私有化,由于静态只能访问静态成员,所有static下    private static final ShareInstance instance = new ShareInstance();    // 提供一个方法供外部访问    public static ShareInstance getInstance(){        return instance;    }

特点 : single类 一进 内存,就已经创建好了对象(开发专用,安全)

2、懒汗式

private ShareInstance(){    }    private static ShareInstanceinstance = null;     public static  ShareInstanceinstance getInstance(){        if(instance == null){            //    synchronized 是锁的概念。能保证在同一时间内只能有一个人去访问他,后面多线程会涉及到            synchronized (ShareInstanceinstance .class) {                if (instance == null) {                    instance = new ShareInstanceinstance ();                    }            }        }        return instance;    }

特点(延时加载) : ShareInstanceinstance 进内存对象还未存在,调用的时候才去创建

五、如何验证对象唯一性

    // 声明一个成员变量用于测试    private int age;    // get方法    public int getAge() {        return age;    }    // set 方法    public void setAge(int age) {        this.age = age;    }在 main 函数  如下调用    public static void main(String[] args) {        ShareInstance  s = ShareInstance.getInstance();        s.setAge(23);        ShareInstance s1 = ShareInstance.getInstance();        //始终只有一个对象  s和s1还有instance 的内存地址始终相同,指向堆内存中的实体  new ShareInstanceinstance ();        System.out.println(s1.getAge());    }输出结果 : 23   // 说明 对象只创建一次。 

单例demo