设计模式--单例

什么是设计模式

是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。话语来自百度

设计模式有什么作用

设计模式是基于场景的解决方案

java一共多少种设计模式

在这里插入图片描述

设计模式大概分类

在这里插入图片描述

单例设计模式

目的:就是为了使得类的一个对象成为该类系统中的唯一实例
定义:一个类有且仅有一个实例,并且自行实例化整个系统提供
要点:某个类只有一个实例,必须自行创建实例,必须自行向整个系统提供这个实例

实现

1.只提供私有的构造方法
2.含有一个该类的静态私有对象
3.提供一个静态的公有方法用于创建、获取静态私有方法

代码实现方式
1.饿汉式(对象创建过程中实例化)

创建一个类

/**
 * Created with IntelliJ IDEA.
 *
 * @Auther: Adger
 * @Date: 2020/06/02/18:39
 *
 * 饿汉式 : 创建对象实例的时候直接初始化
 */
public class SingLeton {
  //1、创建类中私有构造 只提供私有构造方法
  private SingLeton(){

  }

  //2、创建该类型的私有静态实例 instance 代表实例的意思
  private static SingLeton instance = new SingLeton();

  //3、创建公有静态方法返回实例对象
  public static SingLeton getInstance(){
    return instance;
  }
}

创建一个测试类,发现不管怎么拿都是一个对象,创建这个实例的时候就加载这个对象在堆内存中

/**
 * Created with IntelliJ IDEA.
 *
 * @Auther: Adger
 * @Date: 2020/06/02/18:48
 */
public class Test {
  public static void main(String[] args) {
    //这个构造函数时无法被访问到的
    SingLeton one = SingLeton.getInstance();
    SingLeton two = SingLeton.getInstance();
    // 发现得到的都是一个 单例对象
    System.out.println(one);
    System.out.println(two);
  }
}

在这里插入图片描述
该模式能简单快速的创建一个单例对象,而且是线程安全的(只在类加载时才会初始化,以后都不会),这种它有一个缺点,就是不管你要不要都会直接创建一个对象,会消耗一定的性能

2.懒汉式(静态公有方法实列化)

创建一个类

/**
 * Created with IntelliJ IDEA.
 *
 * @Auther: Adger
 * @Date: 2020/06/02/19:03
 *
 * 饿汉式 类内实例对象创建时并不是直接初始化,直到第一次调用get方法时,才完成初始化的操作
 */
public class SingLetonTwo {
  //1、创建私有构造方法
  private SingLetonTwo(){

  }

  //2、创建静态的该实例对象
  private static SingLetonTwo instance = null;

  //3、创建开放的静态方法提供实例对象
  public static SingLetonTwo getInstance(){
    //如果为空就实例化
    if(instance == null){
      instance = new SingLetonTwo();
    }
    return instance;
  }
}

创建测试类

/**
 * Created with IntelliJ IDEA.
 *
 * @Auther: Adger
 * @Date: 2020/06/02/18:48
 */
public class Test {
  public static void main(String[] args) {
    //这个构造函数时无法被访问到的
    SingLetonTwo one = SingLetonTwo.getInstance();
    SingLetonTwo two = SingLetonTwo.getInstance();
    System.out.println(one);
    System.out.println(two);
  }
}

创建实例的时候并不是像饿汉式一样初始化

单例中的饿汉式与懒汉式区别

饿汉式:在类的 加载时就创建实例,线程是安全的
懒汉式:第一次使用时进行实例化,懒汉式存在线程风险,可以解决(同步锁,双重校验锁,静态内部类,枚举)解决

单例模式

优点

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

缺点

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

使用场景

1、创建对象时占用资源过多,但同时又需要用到该类对象
2、对系统内资源要求统一读写,如读写配置信息,配置文件的读写
3、当多个实例存在可能引起程序逻辑错误的时候

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值