• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Jay_zhen
博客园    首页    新随笔    联系   管理    订阅  订阅
单例设计模式

采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例:

public class SingletonTest1 {
	public static void main(String[] args) {
                //Bank bank1 = new Bank(); //new失败,已经私有化类的构造器
                //Bank bank2 = new Bank();
		
		Bank bank1 = Bank.getInstance();
		Bank bank2 = Bank.getInstance();
		System.out.println(bank1 == bank2); //true
	}
}

1饿汉式:类加载的时候就创建一个对象
优点:对象加载时间过长
缺点:饿汉式是线程安全的

class Bank{
	
	//1.私有化类的构造器
	private Bank(){
	}

	//2.内部创建类的对象
	//要求此对象也必须声明为静态的,才可以用类.方法
	private static Bank instance = new Bank();
	
	//3.提供公共的静态的方法,返回类的对象
	public static Bank getInstance(){
		return instance;
	}
}

2懒汉式:调用方法时候用到对象才创建
优点:延迟对象的创建,省内存
缺点:线程不安全--->待定 到多线程内容时,再修改

class Bank{
	
	//1.私有化类的构造器
	private Bank(){
	}
	
	//2.声明当前类对象,没有初始化!

	//4.此对象也必须声明为static的
	private static Bank instance = null;
	
	//3.声明public、static的返回当前类对象的方法
	public static Bank getInstance(){

		if(instance == null){
		    instance = new Bank();
		}
		return instance;
	}
	
}

应用场景:

  1. 网站的计数器,一般也是单例模式实现,否则难以同步。
  2. 应用程序的日志应用,一般都使用单例模式实现,这一般是由于共享的日志文件一直处于打开状态,因为只能有一个实例去操作,否则内容不好追加。
  3. 数据库连接池的设计一般也是采用单例模式,因为数据库连接是一种数据库资源。
  4. 项目中,读取配置文件的类,一般也只有一个对象。没有必要每次使用配置文件数据,都生成一个对象去读取。
  5. Application 也是单例的典型应用
  6. Windows的 Task Manager (任务管理器)就是很典型的单例模式
  7. Windows的 Recycle Bin (回收站)也是典型的单例应用。在整个系统运行过程中,回收站一直维护着仅有的一个实例。
posted on 2021-12-29 10:08  Jay_zhen  阅读(40)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3