设计模式:单例模式
一、单例模式
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; } }

浙公网安备 33010602011771号