饿汉式VS懒汉式单例模式

饿汉式单例模式VS懒汉式单例模式

单例模式:有且只有一个对象

设计模板:

1.首先从源头上控制对象的产生数量–将类的构造方法私有化,即其他任何类均不能产生此类对象。

2.类内部生成唯一静态私有对象。

3.类内部提供静态属性返回唯一对象。

饿汉式单例模式

class Person{
    private String name;
    private Integer age;
    private final static Person person=new Person("小黑",89);//第二步,在类内部生成唯一静态私有对象
    private Person(String name,Integer age){//第一步,将构造方法私有化(起到从源头上阻止生成多个对象)
        this.name=name;
        this.age=age;
    }
    public static Person getPerson() {//第三步,生成静态方法返回唯一对象
        return person;
    }
    public void display(){
        System.out.println(Person.person);
    }
    public String toString(){
        return "姓名为:"+this.name+" 年龄为:"+this.age;
    }
}
    public class Test{
        public static void main(String[] args){
            Person person=null;
            person=Person.getPerson();
            person.display();
        }
    }

懒汉式单例模式

特点:需要时才生成唯一对象。

缺点:懒汉式单例模式存在线程安全问题,在多线程并发下可能会产生不止一个对象。故无强制要求时优先饿汉式单例模式。

class Person{
    private String name;
    private Integer age;
    private static Person person;
    private Person(String name,Integer age){
        this.name=name;
        this.age=age;
    }
    public static Person getPerson() {
        if(person==null){ 
            person=new Person("小黑",89);
        }
        return person;
    }
    public void display(){
        System.out.println(Person.person);
    }
    public String toString(){
        return "姓名为:"+this.name+" 年龄为:"+this.age;
    }
}
    public class Test{
        public static void main(String[] args){
            Person person=null;
            person=Person.getPerson();
            person.display();
        }
    }

猜你喜欢

转载自blog.csdn.net/weixin_42617262/article/details/88077485