单例模式饿汉式

软件从开始到结束的运行过程中,包获赠某一个类只有一个实例(对象)

package 设计模式.单例设计模式;
//饿汉式
public class Single01 {
    public static void main(String[] args) {
        //通过方法获取对象(类加载的时候,对象就已经创建了)
        girlFriend ins = girlFriend.getInstance();//不用加new
        System.out.println(ins.toString());

        girlFriend ins2 = girlFriend.getInstance();//不用加new
        System.out.println(ins.toString());
        //这两次获取对象其实是获取的同一个对象

        System.out.println(ins == ins2);
    }
}

class girlFriend {
    private String name;

    public static int n1 = 100;

    //为了在公共的static方法中返回对象,需要修饰为static
    private static girlFriend gir = new girlFriend("小红");//2.在类的内部创建对象

    //单例--只创建一个对象
    //1.构造器私有化
    private girlFriend(String name) {
        this.name = name;
    }

    //3.提供一个公共的static方法,返回对象
    public static girlFriend getInstance() {
        return gir;
    }

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

 

package 设计模式.单例设计模式;

//单例设计模式--懒汉式(和饿汉式区别是,懒汉式的类加载的时候对象不创建)
//其实就相当于把返回对象的内个方法加个判断
public class Single02 {
    public static void main(String[] args) {
//        new Cat("xiaoming");
        Cat instance = Cat.getInstance();//调用方法的时候,cat为空
        System.out.println(instance);

        Cat instance2 = Cat.getInstance();
        //第二次调用这个方法的时候,因为之前调用过,所以cat不为空,就相当于返回了上次创建的对象
        System.out.println(instance);

        System.out.println(instance == instance2);
    }
}

//希望在程序运行过程中只能创建一个对象
class Cat {

    private String name;
    private static Cat cat;//2.定义一个静态属性的对象(默认为null)

    //步骤1.构造器私有化(这样的话main方法里面【外部类】不能new一个对象)
    private Cat(String name) {
        this.name = name;
    }

    //3.提供一个公共的static方法,返回对象
    public static Cat getInstance() {

        if (cat == null) {//如果还没创建对象,就给他创建一个
            cat = new Cat("小可爱");
        }
        return cat;
    }

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

二者的区别就是对象创建时机不同,饿汉式是加载类的时候就创建对象,懒汉式只有自己调用方法的时候才能创建对象(这样防止了资源浪费,这也是懒汉式相对于饿汉式的优点),懒汉式相对于饿汉式的缺点就是容易存在安全问题(多线程),这个问题之后在解决

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值