手机版 欢迎访问it开发者社区(www.mfbz.cn)网站

当前位置: > 开发

单例设计模式

时间:2021/4/11 9:30:24|来源:|点击: 次

什么是单例设计模式

要想知道什么是单例设计模式就要知道什么是单例
单例:就是一个对象。只有一个对象。
什么时候需要一个对象呢。

痴汉式,也称饿汉式

举个例子:
我们是不是只能有一个老婆,老婆是不是我们私有的,我们的老婆能给别人用吗?这个肯定不可以啊!
那么,是不是应该把自己的老婆给私有化呢。还有一个如何保证老婆只有一个呢。是不是可以把她给设成静态的属性。是不是在类的加载的时候,只会加载一次。在创建老婆的时候,能让别人帮你创建吗?是不是要自己创建,那么是不是应该把创建老婆的方法,也给私有化。

public class singleTon01 {
    public static void main(String[] args) {

         wife wife1=wife.getwife();
        System.out.println(wife1);

        wife wife2=wife.getwife();
        System.out.println(wife2);

    }
}
class wife{
    private String name;
    private int age;


     static wife  qz = new wife("小苍",30);//保证只有一个妻子

    private  wife(String name, int age) {//创造妻子的方法必须私有!
        this.name = name;
        this.age = age;
    }

    public static wife getwife(){//当方法想要使用静态属性的时候,那么方法也要是静态的

     return qz;
    }

    @Override
    public String toString() {//重写toString方法
        return "wife{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

运行结果:
在这里插入图片描述

这个就是痴汉式,也称饿汉式的单例设计模式。

懒汉式

懒汉式:懒汉是不是比较懒的男人,为啥比较懒呢,他是当你需要创建的是时候在创建。

public class singleTon02 {
    public static void main(String[] args) {

        wife xiaocang =wife.getWf("小仓") ;

        System.out.println(xiaocang.toString());
        wife dachang =wife.getWf("大厂") ;
        System.out.println(dachang.toString());

    }
}
class wife{

private int age;
private String name;
private static  wife wf;

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

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

    public static wife getWf(String name){
        if (wf == null) {
            wf =new wife(name);
        }
        return wf;
    }

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

在这里插入图片描述

1、饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变。懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的。

2、从实现方式来讲他们最大的区别就是懒汉式是延时加载,他是在需要的时候才创建对象,而饿汉式在虚拟机启动的时候就会创建,饿汉式无需关注多线程问题,写法简单明了,能用则用。真正用到的时候才去建这个单例对象,“饿汉式”是在不管用不用得上,一开始就建立这个单例对象。

Copyright © 2002-2019 某某自媒体运营 版权所有