java设计模式之单例模式

  • 单例设计模式
    :保证一个类在内存中只有一个对象。

模式:模式就是解决一类问题的固定步骤。

模式的概念最早起源于建筑行业….

建房子的步骤都是一样子:

打地基----->浇柱子------->盖楼面--------->砌墙--------->封顶---->装修-----入住

软件行业中23种设计模式:

单例设计模式
模板设计模式
装饰者设计模式
观察者设计模式
工厂设计模式

单例设计模式的步骤:

  • 懒汉单例设计模式:
  1. 私有化构造函数。
  2. 声明本类的引用类型变量,但是不要创建对象,
  3. 提供公共静态的方法获取本类的对象,获取之前先判断是否已经创建了本类对象,如果已经创建了,那么直接返回对象即可,如果还没有创建,那么先创建本类的对象,然后再返回。

懒汉代码:

public class Lazy {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
       Students stu=Students.getStudent();//创建了一个单例对象
       Students stu1=Students.getStudent();
       System.out.println(stu==stu1);  //判断是否是单例对象

    }

}
class Students{ 
    private static Students students=null; //明本类的引用类型变量,但是不要创建对象,
    private Students() {  //私有化构造函数

    }
    /*
     * 提供公共静态的方法获取本类的对象,
     * 获取之前先判断是否已经创建了本类对象,
     * 如果已经创建了,那么直接返回对象即可,
     * 如果还没有创建,那么先创建本类的对象,然后再返回。
     */
    public static synchronized Students getStudent() { //synchronized是解决多线程的问题
        if(students==null) {
            students=new Students();
        }
        return students;

    }

}

运行结果:

true

  • 饿汉单例设计模式
  1. 私有化构造函数。
  2. 声明本类的引用类型变量,并且使用该变量指向本类对象。
  3. 提供一个公共静态的方法获取本类的对象。

饿汉的单例代码实现:

public class Hunger {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Car car=Car.getCar();       //创建一个单例对象
        Car car1=Car.getCar();     //创建其他的单例对象
        System.out.println(car==car1);  //判断这俩个单例对象是否相同

    }

}
class Car{
    private Car() { //私有化构造函数。

    }
    private static  Car car=new Car(); //声明本类的引用类型变量,并且使用该变量指向本类对象。
    public static Car getCar() {      //提供一个公共静态的方法获取本类的对象。
        return car;

    }
}

运行结果:

true

推荐使用:饿汉单例设计模式。因为懒汉单例设计模式会存在线程安全问题,目前还不能保证一类在内存中只有一个对象。所以用synchronized,在一般的情况下使用恶汉模式。

  • 饿汉和懒汉的区别:

1)饿汉是线程安全的,在类创建的时候就创建好了一个静态的对象让系统使用,以后也不会发生改变。—– 懒汉模式在创建实例的时候如果不加上 synchronized 就会导致对象的访问不是线程安全的
2)实现方式:懒汉是延时加载的,在需要的时候才会创建,但是饿汉模式是在虚拟机启动就创建,饿汉是不需要考虑线程安全的问题的,而且写的格式也比较简单。但实饿汉是在类加载的时候才创建对象,不管系统会不会用都会创建一个实例的对象,这就导致了内存的浪费。
3)与现实中的比较:
懒汉模式:一个人回家饿了,饭桌上有一个冷的馒头,当加热后你才会吃
饿汉模式:看到馒头是不管是不是热的都直接拿起来吃掉。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值