设计模式(一)---单例

来源:互联网 发布:mac系统误删文件 编辑:程序博客网 时间:2024/05/18 03:59

思路

1、如果其他程序能够随意用new创建该类对象,那么就无法控制个数。因此,不让其他程序用new创建该类的对象。

2、既然不让其他程序new该类对象,那么该类在自己内部就要创建一个对象,否则该类就永远无法创建对象了。

3、该类将创建的对象对外(整个系统)提供,让其他程序获取并使用。


步骤

1、 将该类中的构造函数私有化。
2、在本类中创建一个本类对象。
3、定义一个方法,返回值类型是本类类型。让其他程序通过该方法就可以获取到该类对象。



单例又可以分为饿汉式和懒汉式

package cn.hncu.pattern.single;


import org.junit.Test;

/*
 * 饿汉式单例---先造好等别人过来拿
 */
public class Single {
private static final Single s = new Single();
private Single(){
}
public static Single getInstance(){//静态的是为了能访问
return s;
}
}


//懒汉式

class Single2 {
private static Single2 s = null;
private Single2(){
            }
public static Single2 getInstance() {
if(s==null)
s=new Single2();
return s;
}
}

package cn.hncu.pattern.single;

import org.junit.Test;

/*
 * 懒汉式   - ---  线程安全优化   在多线程的时候入过不加锁会有bug,每个线程开始的时候都是null,都会重新new,所以要加锁
 * 当有人访问的时候才new
 */
public class Single2 {
private  static Single2 s = null;

private Single2(){

}
public synchronized static Single2 getInstance(){//当有人访问的时候,先判断再new
if(s==null){
s = new Single2();
}
return s;
}

}




原创粉丝点击