Java设计模式其一【单例设计模式】

来源:互联网 发布:巴基斯坦取消 知乎 编辑:程序博客网 时间:2024/06/01 07:52


毕向东学习视频08_04-面向对象(单例设计模式-概述&体现).avi

如果不保证对象唯一性:输出 10 14 

如果保证了对象唯一性:输出 14 14


package day08;/* 如何保证对象唯一性?1.不允许其他程序用new创建该类对象。2.在该类中创建一个本类实例。3.对外提供一个方法让其他程序可以获取该对象。步骤:1.私有化该类的构造函数。2.通过New在本类中创建一个对象。3.定义一个公有的方法,将创建的对象返回。 */class Single {private int num;public int getNum() {return num;}public void setNum(int num) {this.num = num;}//以上是普通的函数 //以下5行实现 对象唯一性static Single s = new Single(); //创建本类类型private Single(){}//私有化构造函数public static Single getS(){//获取return s;}}public class SingleDemo {public static void main(String[] args) {//Single ss = Single.getS();//可控//Single s = Single.s;//不可控Single t1 = Single.getS();Single t2 = Single.getS();//如果不需要保证对象唯一性 不能按照上面两行调用方式// 把Single类中的对象唯一性部分去掉后 再改为://Single t1 = new Single();//Single t2 = new Single();t1.setNum(10);t2.setNum(14);System.out.println(t1.getNum());System.out.println(t2.getNum());}}



面试几乎都是问延迟加载的模式 即 懒汉式

一般应用的时候都是用饿汉式



懒汉式存在安全隐患 在多线程运用时

//饿汉式class Single//类一加载,对象就已经存在了。{private static Single s = new Single();private Single(){}public static Single getInstance(){return s;}}//懒汉式class Single2//类加载进来,没有对象,只有调用了getInstance方法时,才会创建对象。//延迟加载形式。 {private static Single2 s = null;private Single2(){}public static Single2 getInstance(){if(s==null)s = new Single2();return s;}}



2016.6.26日

学习多线程后

//懒汉式  class Single2//类加载进来,没有对象,只有调用了getInstance方法时,才会创建对象。            //延迟加载形式。   {    private static Single2 s = null;    private Single2(){}    public static Single2 getInstance()    {    if(s==null){//解决了效率问题,一旦创建了一个对象后,就不会在重复要锁了  synchronized(Single.class)//同步代码块解决了安全性问题  {        if(s==null)          s = new Single2();    }      return s;    }    }}  


0 0
原创粉丝点击