设计模式:单例模式

一、单例模式

1、饿汉式,实现一个类只能创建(或者说是拥有)一个对象

懒汉式的实现步骤为:

类内创建静态对象引用

构造器私有化(防止用户直接new对象)

向外部暴露一个静态的公共方法(GetInstance)

问:为什么必须是静态对象和静态公共方法呢?

答:因为如果不是静态的公共方法,只能构建类的对象,然而由于构造器私有化了,我们又无法创建对象。因此返回创建的对象的公共方法必须静态,又因为静态方法只能访问静态属性,因此创建的对象的引用必须静态

package com.extend;

class Student
{
    private static Student student=new Student("小红");
    private String name;

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

    public static Student GetInstance()
    {
        return student;
    }
}

public class Lanhan {
    public static void main(String args[])
    {
        Student s1=Student.GetInstance();
    }
}

public class Lanhan {
    public static void main(String args[])
    {
        Student s1=Student.GetInstance();
        //Student s2=Student.GetInstance();由于对象是静态变量,因此s2指向的任旧是和s1相同的对象
    }
}

饿汉式的问题在于,可能我只是使用类中的一个静态变量或者其他静态方法,但是由于静态属性和静态化的构造器在类加载的时候就初始化执行,因此特别浪费空间和资源

2、懒汉式

懒汉式的实现步骤和饿汉式相同,但是区别在于懒汉式的类中的对象创建只是先创建引用,在构造器的环节中再进行对象的初始化

//单例设计模式,懒汉式
class Teacher
{
    private static Teacher teacher;
    private String name;

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

    public static Teacher Get_Instance()
    {
        //在用户决定创建对象的时候再调用该方法的时候,进行类内静态对象的初始化
        //直接new的问题,如果用户重复调用该函数,则类内的引用会不断更改指向,虽然都是指向名叫小黄的Teacher类型的类,但是指向的空间会不断发生变化,导致再堆中开辟多余的类空间
        /*teacher=new Teacher("小黄");*****/
        
        //正确写法:
        if(teacher==null)
        {
            teacher=new Teacher("小黄");
        }
        return teacher;
    }
}

 

posted @ 2021-11-18 21:40  小康规划  阅读(40)  评论(0)    收藏  举报