Java学习笔记(五)面向对象---单例设计模式

设计模式

软件设计模式(Design pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。

单例设计模式

这一模式的目的是使得类的一个对象成为系统中的唯一实例。

实现

  • 首先分析,为了保证对象唯一,需要:
  1. 为了避免其他程序过多建立该对象,禁止其他程序建立该对象。
  2. 为了让其他程序可以访问该对象,需要在本类中,自定义一个对象。
  3. 为了方便其他程序对自定义对象的访问,需要在该类中对外提供一些访问方式。
  • 代码体现
  1. 将构造函数私有化。
  2. 在类中创建一个本类对象。
  3. 提供方法以便于访问该对象。

实现方式一:饿汉式

特点

先初始化对象。 类一进入内存,就已经创建好的了对象。
(开发中常用的方式,安全,简单)

举例

class Student {
    private String name;
    /*
    由于外部程序不能创建对象,所以只能使用静态代码块来返回对象,使得在该类在一加载的时候就创建对象。
    */
    private static Student s = new Student();
    private Student(){} //私有化构造函数,防止外部程序过多建立对象。
    /*
    使用静态代码块,以便使用”类名.方法“的形式来获取本类创建的对象实例。
    */
    public static Student getInstance() {
        return s;
    }
    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}
public class StudentDemo {
    public static void main(String[] args) {
        Student s1 = Student.getInstance();
        Student s2 = Student.getInstance();
        s1.setName("lyx");
        System.out.println(s2.getName());
    }
}

运行结果

lyx

通过单例设计模式使得上述程序中,只存在一个Student类创建的对象,所以可以实现s1和s2可以对唯一的对象实例进行访问和操作。

实现方式二:懒汉式

延时加载对象,当方法被调用时才初始化对象。
类进了内存,对象还不存在,只有调用了getInstance方法时,才建立对象。

举例

class Student {
    private String name;
    private static Student s = null;//一开始的时候不创建对象
    private Student(){}
    public static Student getInstance() {
        if(s == null) {
            s = new Student(); //当方法被调用时才初始化对象
        }
        return s;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
}
public class StudentDemo {
    public static void main(String[] args) {
        Student s1 = Student.getInstance();
        Student s2 = Student.getInstance();
        s1.setName("lyx");
        System.out.println(s2.getName());
    }
}

运行结果

lyx

你可能感兴趣的:(Java学习笔记(五)面向对象---单例设计模式)