Java单例模式

来源:互联网 发布:audition mac 破解版 编辑:程序博客网 时间:2024/05/17 22:38

单例模式简单说即一个类只有一个对象实例。

从具体实现角度来说,就是以下三点:
1. 单例模式的类只提供私有的构造函数
2. 类定义中含有一个该类的静态私有对象
3. 该类提供了一个静态的公有的函数用于创建或获取它本身的静态私有对象,并返回该对象。

代码:

package 单例模式;/*好处:保证对象的唯一性 * 步骤: * 1,私有化该类构造方法 * 2,通过new在本类创建一个本类对象 * 3,定义一个公有的方法,创建将对象返回 *///单例模式的饿汉模式,类一加载,对象就存在class Single{    static Single single=new Single();    private Single() {    }    public static Single getInstance(String name) {        /*逻辑判断*/        return single;  //返回对象    }}//单例模式的懒汉模式,类加载是没有对象,调用geyInstance才有对象class Single{    static Single single=null;    private Single() {    }    public static Single getInstance(String name) {        /*逻辑判断*/        if(single==null){            single=new Single();            return single;        }    }}/*-----------------------------------------------------*///使用单例与不使用单例的区别public class SingleModel {    public static void main(String[] args) {        //不使用Single ss=Single s;和set、get一样的道理,可控        Single ss=Single.getInstance("条件");        //来看看唯一性,使用单例模式        useSingle us1=useSingle.getInstance();        useSingle us2=useSingle.getInstance();        us1.setNum(10);        us2.setNum(20);        System.out.println(us1==us2);        System.out.println("使用单例模式,us1:"+us1.getNum());        System.out.println("使用单例模式,us2:"+us2.getNum());        //不使用单例模式        notUseSingle nus1=new notUseSingle();        notUseSingle nus2=new  notUseSingle();        nus1.setNum(10);        nus2.setNum(20);        System.out.println(nus1==nus2);        System.out.println("不使用单例模式,nus1:"+nus1.getNum());        System.out.println("不使用单例模式,nus2:"+nus2.getNum());    }}class useSingle{    private int num;        private static useSingle us=new useSingle();    private useSingle() {    }    public static useSingle getInstance(){        return us;    }    public void setNum(int num){        this.num=num;    }    public int getNum(){        return num;    }}class notUseSingle{    public int num;    public void setNum(int num){        this.num=num;    }    public int getNum(){        return num;    }}

输出结果:

true
使用单例模式,us1:20
使用单例模式,us2:20
false
不使用单例模式,nus1:10
不使用单例模式,nus2:20