设计模式_03_单例模式

为什么会有单例模式

Why

有很多我们只需要一个对象的情况:线程池、缓存、对话框、注册表的对象、日志对象、显卡等设备的驱动程序的对象。事实上,对于这种对象类型,如果我们实例化超过一个对象,就会碰到各种问题,像程序的行为异常、资源使用过量或者不一致的结果。

作用

用来确保为给定类实例化一个独一无二的对象。例如你有一个包含注册表设置的对象,你肯定不想让这个对象有多个副本,到处赋值——这会导致混乱。通过单例模式,可以确保应用中的每个对象使用同一全局资源。单例模式常常被用来管理资源池,像连接池、线程池。许多开发人员碰到bug,是因为有多个对象副本而他们去浑然不知。

单例模式为什么只有一个对象

1、构造方法的访问权限修饰符为private,只能在自己类中创建实例,不能在其他类中用new创建实例

2、通过本类中的静态方法使用new获取实例,赋值给本类中的静态变量

3、静态方法内含有一个判断实例对象是否存在的语句,如果存在返回该实例对象,不存在则创建实例对象

//单例类也是一个类(抽象数据类型),也具有自己想要的属性与行为,
//只不过因为添加了私有构造方法使它从普通类变成了单例类(好比男人和太监,不太恰当)
public Singleton{
    //类型为Singleton的静态变量
    private static Singletom uniqueInstance;
    
    //其他有用的实例变量
    
    //私有构造方法,只能在本类内创建实例
    private Singleton{}
	//静态方法,返回类型为Singleton
    public Singleton getInstance(){
        
        if(uniqueInstance == null)
            uniqueInstance = new Singleton();
    	return uniqueInstance;
    }
    
    //其他有用的方法
}

我们让一个类来管理自己家的单个实例,同时也避免其他类自行创建新实例。想取得实例,只能通过该类。

单例模式提供该实例的全局访问点:无论何时你需要一个实例,只需要查询该类,他就会返回单个实例(类名.静态方法,很可能当你请求它时,它正在帮助其他对象),这可以使单例对象以延迟方式被创建(延迟实例化,第一次用时被实例化,不是在程序启动时就实例化,实例化之后就不需要再实例化了,只是从类中获取该实例化对象),这对资源密集的对象特别重要。

类图

总结

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值