设计模式【四】单例模式

单例模式:一个类只能创建一个实例。

类图:

实现方式有以下几种:

1、懒汉式:

public class Export {

    private static Export export;

    private Export() {
    }

    public static Export getInstance() {
        if (export == null) {
            export = new Export();
        }
        return export;
    }

    public void print(){
        System.out.println("this is singleton");
    }

}

2、线程安全懒汉式:全部实例加锁

public class SyncFuncExport {

    private static SyncFuncExport export;

    private SyncFuncExport() {
    }

    public static synchronized SyncFuncExport getInstance() {
        if (export == null) {
            export = new SyncFuncExport();
        }
        return export;
    }

    public void print(){
        System.out.println("this is synchronized function singleton");
    }

}

3、线程安全锁懒汉式:如果已初始化则没有锁,提高性能

public class SyncClassExport {

    private static SyncClassExport export;

    private SyncClassExport() {
    }

    public static SyncClassExport getInstance() {
        if (export == null) {

            synchronized (SyncClassExport.class) {
                if (export == null) {
                    export = new SyncClassExport();
                }
            }

        }
        return export;
    }

    public void print(){
        System.out.println("this is synchronized class singleton");
    }

}

4、类加载时实例化,实现简单。

public class InitExport {

    private static InitExport export = new InitExport();

    private InitExport() {
    }

    public static InitExport getInstance() {
        return export;
    }

    public void print(){
        System.out.println("this is init singleton");
    }

}

5、通过内部类,在使用时实例化

public class InnerClassExport {

    private static class InnerClassExportInstance{

        public static final InnerClassExport export = new InnerClassExport();

    }

    private InnerClassExport() {
    }

    public static InnerClassExport getInstance() {
        return InnerClassExportInstance.export;
    }

    public void print(){
        System.out.println("this is inner class singleton");
    }

}

6、为避免子类实例化,添加final,不能被继承

public final class InitExport {

    private static InitExport export = new InitExport();

    private InitExport() {
    }

    public static InitExport getInstance() {
        return export;
    }

    public void print(){
        System.out.println("this is init singleton");
    }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值