单例设计模式

单例的要求:保证一个类在程序中只有一个对象。


如何保证对象的唯一性:

1.不允许其它程序用new创建该对象

2.在该类创建一个本类实例

3.对外提供一个方法让其他程序可以获取该对象


步骤:

1.私有化该类的的构造函数

2.通过new在本类中创建一个本类对象

3.定义了一个公有的方法,将创建的对象返回


package gt;

/**
 * Created by Cronous on 2017/10/29.
 * 单例设计模式
 */
public class day01 {

    public static void main(String[] args){
        Single s = Single.getInstance();
        System.out.println("s=" + s);
    }
}

class Single{
    //1.自己内部创建对象,因为返回方法是静态所以需要静态修饰
    private static Single s = new Single();
    //2.私有化构造方法
    private Single(){}
    //3.创建公共的内部函数,new对象并返回对象
    //4.注意这里不能创建对象,所以需要加上static修饰符
    public static Single getInstance() {
         return s;
    }
}

下面看一个例子:

package gt;

/**
 * Created by Cronous on 2017/10/29.
 * 单例设计模式
 */
public class day01 {

    public static void main(String[] args){
        Single s1 = Single.getInstance();
        Single s2 = Single.getInstance();
        System.out.println("s1 == s2 ?" + (s1 == s2));
        s1.setInt(5);
        System.out.println("i= " + s2.getInt());
    }
}

class Single{
    private int i = 1;
    //自己内部创建对象,因为返回方法是静态所以需要静态修饰
    private static Single s = new Single();
    //2.私有化构造方法
    private Single(){}
    //3.创建公共的内部函数,new对象并返回对象
    //4.注意这里不能创建对象,所以需要加上static修饰符
    public static Single getInstance() {
         return s;
    }

    public void setInt(int i){
        this.i = i;
    }
    public int getInt(){
        return i;
    }
}
这里我们得到两个实例,比较一下是否是同一个实例,并且以第一个实例设置 i 的值,

之后通过第二个实例获取,观察 i 的唯一性,如果唯一,s1 s2 引用的就是唯一实例。

控制台结果如下:

s1 == s2 ?true
i= 5


结果论证成功。


单例的另外一种表现形式:懒汉式和饿汉式的区别

上面的为饿汉式,类一加载对象就存在了

我们看下面的懒汉式:

class Single{
    private int i = 1;
    //自己内部创建对象,因为返回方法是静态所以需要静态修饰
    private static Single s = null;
    //2.私有化构造方法
    private Single(){}
    //3.创建公共的内部函数,new对象并返回对象,这里懒汉式先判断对象是否存在
    public static Single getInstance() {
        if(s == null){
            s = new Single();
        }
        return s;
    }
    public void setInt(int i){
        this.i = i;
    }
    public int getInt(){
        return i;
    }
}

懒汉式也就是延时加载

真正开发其实饿汉式用的较多



                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值