设计模式------单例模式(含代码)!!!!

一. 单例模式概述

单例模式(Singleton),也叫单子模式,是一种常用的设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候,整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息,显然,这种方式简化了在复杂环境下的配置管理。

特别地,在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。事实上,这些应用都或多或少具有资源管理器的功能。例如,每台计算机可以有若干个打印机,但只能有一个 Printer Spooler(单例) ,以避免两个打印作业同时输出到打印机中。再比如,每台计算机可以有若干通信端口,系统应当集中 (单例)管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。总之,选择单例模式就是为了避免不一致状态,避免政出多头。

综上所述,单例模式就是为确保一个类只有一个实例,并为整个系统提供一个全局访问点的一种方法。

二:饿汉式HungrySingLeton

懒汉:一个类只允许被创建1次对象

1:构造器私有化
2:初始化一个私有静态的对象
3:提供一个公开的静态的获取对象的方法

注意
1:对象产生的时间:类加载的时候就被创建了
优点:代码简单,安全性较高
缺点:创建对象时机过早,有可能会浪费内存空间


public class Demo {
	
	public static void main(String[] args) {
		
		Student stu1 = Student.newInstance();
		Student stu2 = Student.newInstance();
		Student stu3 = Student.newInstance();
		
		System.out.println(stu1);
		System.out.println(stu2);
		System.out.println(stu3);
	}

}

public class Student {
	
	private static Student student = new Student();
	
	public static Student newInstance(){
		
		return student;
	}
	
	private Student(){
		
		System.out.println("创建对象");
	}
	
	

}

三: 懒汉式LazySingLeton

懒汉式:什么时候用什么时候创建对象

1:构造器私有化
2声明一个私有的静态的对象变量
3:提供一个公开的静态获取对象的方法

  • 注意:创建时间恰当
    注意:多线程的情况下,容易出现多个对象

    使用双重校验法


public class Demo {

	public static void main(String[] args) {
		
		Student stu1 = Student.newInstance();
		Student stu2 = Student.newInstance();
		Student stu3 = Student.newInstance();
		
		System.out.println(stu1);
		System.out.println(stu2);
		System.out.println(stu3);
		
	}

}


public class Student {
	
	private static Student student;
	
	public static Student newInstance(){
		//提高效率,如果第一次创建对象成功,后面就不用进入同步当中,直接返回对象即可
		if(student==null){
			synchronized (Student.class) {
				//如果是第一次调用方法,进入if,创建对象
				if(student==null){
					student = new Student();
				}
			}
		}
		
		return student;
	}
	
	private Student(){
		
	}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值