黑马程序员----单例设计模式

来源:互联网 发布:sqlalchemy sql注入 编辑:程序博客网 时间:2024/05/29 18:48

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流!-------

单例的作用:只能让内存中只有这一个类的存在,也就是说这个类只能有一个实例,别人来共同

设计的目的以及什么时候调用:优化内存,如果一个类它只有一个变量,那么它是以类存在的话,此时就可以设计成单例模式。

如何设计:

一,它不能被其他类给实例化了。

二,它可以自己提供一个实例化方法,三,这个方法是静态的,要对外访问。

两种单例:
懒汉式,顾名思义,比较懒,当要用到的时候,再去加载它,不然就不给加载。
饿汉式:用到的时候就已经加载好了。

饿汉式:

class Singleton {// 私有,静态的类自身实例private static Singleton instance = new Singleton();// 私有的构造子(构造器,构造函数,构造方法)private Singleton() {}// 公开,静态的工厂方法public static Singleton getInstance() {return instance;}}
懒汉式:

class Single {// 私有构造方法,不允许其他类创建对象private Single() {};private static Single instance = null;// 提供获取对象的方法public static Single getInstance() {if (instance == null) { // 用到的时候再去加载它.instance = new Single();}return instance;}}
懒汉式优化:多线程

class Single {/* * 如果单例是被多条线程给执行了, 那么执行懒汉式的时候,就出现 *  * 两条线程同时执行了null的方法, 那么A线程执行等于null,实例化一个对象了,B再进来又被实例化了一条 *  * 这是不允许的,那么就要用到synchronized同步锁这个概念 */private Single() {};private static Single instance = null;// 提供获取对象的方法public static Single getInstance() {// 提高判断锁的效率不让每次都判断// 如果是synchronized在前面的话,每次都要判断锁,效率很低。if (instance == null)// 多线程的同步操作,锁是自身的字节码synchronized (Single.class) {if (instance == null)// 自己创建对象instance = new Single();}return instance;}}




0 0
原创粉丝点击