JAVA设计模式

单例设计模式

单例设计模式属于创建型模式,提供了一种创建对象的最佳方式
基本思想:保证一个类中只能有一个实例,避免频繁的创建和销毁对象,减少内存开销, 并提供一个访问它的全局访问点
避免对资源的多重占用(比如写文件操作)

package cn.tedu.java;

/** 单例设计模式:
 * 属于创建型模式,提供了一种创建对象的最佳方式
 * 基本思想:
 * 保证一个类中只能有一个实例,避免频繁的创建和销毁对象,减少内存开销,并提供一个访问它的全局访问点
 * 
 * 避免对文件的多重占用(比如写文件操作)
 *
 * 缺点:没有接口,不能继承.
 * */
public class Singleton {
  public static void main(String[] args) {
    MySingleton1 s1 = MySingleton1.getInstance();
    MySingleton1 s2 = MySingleton1.getInstance();
    System.out.println(s1 == s2);
    System.out.println(s1.equals(s2));

    MySingleton2 s3 = MySingleton2.getInstance();
    MySingleton2 s4 = MySingleton2.getInstance();
    System.out.println(s3 == s4);
    System.out.println(s3.equals(s4));
  }
}

/**
 * 饿汉式:
 * 直接创建对象.线程安全
 * 优点:获取类的时候,创建并初始化,加载较慢,但获取对象较快,
 * 直接创建实例对象,不管你是否需要这个对象都会创建
 * 
 * 缺点:没有达到懒加载效果,如果对象没有被使用,造成了资源的浪费
 * 
 * (1)构造器私有化
 * (2)并用静态变量保存
 * (3)向外提供这个实例,强调这是一个单例,可以用final修改
 */
class MySingleton1 {
  private MySingleton1() {}

  private static final MySingleton1 singleton = new MySingleton1();

  public static MySingleton1 getInstance() {
    return singleton;
  }
}

/**
 * 懒汉式:
 * 延迟创建对象
 * 优点:第一次调用时才初始化.避免了内存的浪费
 * 缺点: 必须synchronized才能保证单例,但加锁会影响效率
 */
class MySingleton2{
    private MySingleton2(){}
    private static MySingleton2 singleton;
    public static MySingleton2 getInstance(){
        if (singleton==null){
            synchronized (MySingleton2.class){
                if (singleton==null){
                    singleton=new MySingleton2();
                }
            }
        }
        return singleton;
    }
}

饿汉式的另一种枚举形式

/**
 * 枚举类型
 * 表示该类型的对象是有限的几个
 * 我们可以限定为一个,就成了单例
 *
 * @author guoxin
 * @date 2021/10/12
 */
public enum Singleton2 {
    INSTANCE
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值