设计模式之单例模式

  • 设计模式是一套被反复使用、多数人知晓的经过分类编目的、代码设计经验的总结
  • 设计模式是软件开发人员在软件开发中面临的一般问题的解决方案

设计模式:

创建型设计模式(创建对象)

工厂方法模式

创建者模式

抽象工厂模式

原型模式

单例模式(重点)

现实中的对应的原理:一山不容二虎(指挥官只能有一个)
计算机系统:

  • 驱动程序
  • 打印机后台处理程序
  • 线性池
  • 缓存
  • 日志

目的: 使得类的一个对象称为该类系统的唯一实例
定义:一个类有且仅有一个实例,并且==自行实例化(调构造方法)==向整个系统提高

两种创建模式

		- 饿汉式 
		- 懒汉式

要点:1.某个类只能有一个实例
2、必须自行创建实例
3.必须自行向整个系统提供这个实例
实例:
1.只提供私有的构造方法
2.含有一个该类的静态私有对象
3.提供一个静态的共有方法用于创建、获取静态私有对象

饿汉 和懒汉:
1.饿汉式在类加载时就创建实例,第一次加载速度快
懒汉在第一次使用时才进行实例化,第一次加载速度慢
饿汉式:空间换时间
懒汉式:时间换空间
2.饿汉式线程安全:懒汉式存在线程风险
解决方案:
1、同步锁
2、双重校验所
3.静态内部类
4.枚举
优点:

  • 在内存中只有一个对象,节省内存空间
  • 避免重复的创建销毁对象,提高性能
  • 避免对共享资源的多重占用

缺点:

  • 扩展比较困难
  • 如果实例化后的对象长期不用,系统将默认为垃圾进行回收,造成对象状态丢失

适用场景:

  • 创建对象时占用资源过多,但同时又需要用到该类对象
  • 对系统内资源要求统一读写,如读写配置信息
  • 当多个实例存在可能引起程序逻辑错误,如号码生成器

代码实现如下

package org.oracle.singleton;
/*单例模式整个系统有且只有唯一的实列,需要自行实例化向这个系统提供
* 饿汉:创建对象时直接初始化  空间换时间(时间效率高)
*(线程安全)
*
*
* */
public class SingletonOne {
    /*将改造方法改为private 限制实例化只能在本类中进行*/
    private SingletonOne() {

    }
    //创建有且唯一的实例
   private static SingletonOne singletonOne = new SingletonOne();
    //创建getInstance方法获取实例
    public  static  SingletonOne getInstance(){
            return singletonOne;
    }
}

package org.oracle.singleton;
/*在创建对象时不去实例化,当第一次掉get方法时在实例化对象
*
*懒汉(线程不安全)
* 时间换空间*/
public class SingletonTwo {
    //创建私有的构造方法
    private SingletonTwo(){

    }
    private  static  SingletonTwo singletonTwo;
    //创建本类的有且唯一的对象 不初始化,当调用get方法时实例化。并对外提供实例的访问
    public  static SingletonTwo getInstance(){
        if(singletonTwo ==null){
            singletonTwo =new SingletonTwo();
        }
        return  singletonTwo;
    }

}

结构型模式(类与对象的关系)

行为型模式(对象与对象的通讯)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值