【Java基础】9 单例设计模式

什么是单例模式

单例:单个实例

  • 所谓的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。

  • 单例模式有两种方式

    • 饿汉式
    • 懒汉式

单例模式应用实例

饿汉式和懒汉式实现步骤

  • 构造器私有化 -> 防止直接new新对象

  • 类的内部创建对象

  • 向外暴露一个静态的公共方法返回该对象实例 -> getInstance

饿汉式代码实现

饿汉式解释:还没用到该单例对象时,就已经创建好了,饿汉式可能造成创建了对象,但是没有使用


public class 单例模式1饿汉式 {
    public static void main(String[] args) {
        GirlFriend girFriend = GirlFriend.getGirFriend();
        System.out.println(girFriend);
        GirlFriend girFriend1 = GirlFriend.getGirFriend();
        System.out.println(girFriend1);
    }
}

class GirlFriend{
//饿汉式解释:还没用到该单例对象时,就已经创建好了
//饿汉式可能造成创建了对象,但是没有使用
    private String name ;
    private static GirlFriend gf = new GirlFriend("鑫鑫") ;

    private GirlFriend(String name) {
        this.name = name;
    }

    public static GirlFriend getGirFriend(){
        return gf ;
    }

    @Override
    public String toString() {
        return "GirlFriend{" +
                "name='" + name + '\'' +
                '}';
    }
}

懒汉式代码实现

懒汉式:只有当用户使用getInstance方法时,才会创建单例对象,然后再次调用时,会返回上次创建的对象。

public class 单例模式懒汉式 {
    public static void main(String[] args) {
        Cat cat = Cat.getCat();
        System.out.println(cat.getName());
        Cat cat1 = Cat.getCat();
        System.out.println(cat == cat1);
    }
}

class Cat{

    private String name  ;

    private static Cat cat = null ;
    private Cat(String name) {
        System.out.println("构造器被调用....");
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public static Cat getCat(){
        if( cat == null ){
            cat = new Cat("笨笨");
        }
        return cat ;
    }
}

饿汉式VS懒汉式

  • 二者最主要的区别在于创建对象的时机不同

    • 饿汉式是在类加载时就创建了对象实例
    • 懒汉式实在使用该对象时才创建
  • 饿汉式不存在线程安全问题,懒汉式存在线程安全问题

  • 饿汉式存在浪费资源的可能。因为如果程序员一个对象实例都没有使用,那么饿汉式创建的对象就浪费了,懒汉式是使用时才创建对象,就不存在这个问题

  • 在JavaSE标准类中,java.lang.Runtime就是经典的单例模式

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值