JAVA单例模式

JAVA设计模式

一、单例模式

1、定义

单例模式:确保一个类只有一个实例,并且提供一个全局访问点;

2、单例模式特点:

只有一个实例;

自我实例化;

提供全局访问点;

3、单例模式优缺点

优点:由于单例模式只生成了一个实例,所以能够节约系统资源,减少性能开销,提高系统效率,同时也能够严格控制客户对它的访问。

缺点:也正是因为系统中只有一个实例,这样就导致了单例类的职责过重,违背了“单一职责原则”,同时也没有抽象类,这样扩展起来有一定的困难。

4、单例模式 五种实现方式

a、饿汉式

线程安全,调用效率高。但是不能延时加载

package day4;

public class Single_2 {
    public static Single_2 instance=new Single_2(); //1、内部创建实例
    private Single_2(){                   //2、构造器私有化——外部不能创建对象
    }
    public static Single_1 getInstance(){  //3、公有静态方法,返回实例对象
        return instance;
    }
}

b、懒汉式

线程不安全

public class Single_1 {
    public static Single_1 instance=null; //1、内部创建实例
    private Single_1(){                   //2、构造器私有化——外部不能创建对象

    }
    public static Single_1 getInstance(){ //3、共有静态方法,返回实例对象
        if(instance==null)
        {
            instance=new Single_1();
        }
        return instance;
    }
}

c、双重检查加锁(懒汉式)

线程安全;

同步代码块实现,线程安全

public class Single_3 {
    public static Single_3 instance_3=null;
    private Single_3(){

    }
    public static Single_3 getInstance_3(){
        if(instance_3==null)//第一重检查
        {
            synchronized (Single_3.class) {//加锁
                if (instance_3 == null) {//第二重检查
                    instance_3 = new Single_3();
                }
            }
        }
        return instance_3;
    }
}

d、静态内部类

实现单例模式

public class Single_4 {
    public static class Sin {                  //静态内部类
        public static Single_4 instance_4 = new Single_4();
    }
    private Single_4(){

    }
    public static Single_4 getInstance_4(){
        return Sin.instance_4;
    }
}

e、枚举类实现单例模式


public enum Singleton {
	uniqueInstance;// 定义一个枚举的元素,它 就代表了Singleton的一个实例
	public void singletonOperation() {
		// 功能处理 
	
        System.err.println("功能处理");
	}
 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值