单列模式【饿汉式和懒汉式】
单例模式就是一个类只提供一个对象出来,提供一个取得这个对象的方法。
单例模式有两种:
- 饿汉式
- 懒汉式
1、饿汉式
- 私有化构造器
- 类的内部创建对象
- 向外提供一个访问本类的对象的静态方法
package com.linghu.single; /** * 饿汉式 * @author 令狐荣豪 * @version 1.0 */ public class SingleTon01 { public static void main(String[] args) { // Girlfriend instance = Girlfriend.getInstance(); // System.out.println(instance); //饿汉式 System.out.println(Girlfriend.n);//访问静态属性时,类的对象还是会被初始化创建,这就浪费了! } } class Girlfriend{ private String name; public static int n=100; private static Girlfriend gf=new Girlfriend("小红"); private Girlfriend(String name) { System.out.println("构造器。。。"); this.name = name; } public static Girlfriend getInstance(){ return gf; } @Override public String toString() { return "Girlfriend{" + "name='" + name + '\'' + '}'; } }
2、懒汉式
package com.linghu.single; /** * 懒汉式 * @author 令狐荣豪 * @version 1.0 */ public class SingleTon02 { public static void main(String[] args) { //访问静态属性的时候,对象不会被创建,不会浪费,需要的时候才会初始化创建对象 System.out.println(Cat.n); // Cat instance = Cat.getInstance(); // System.out.println(instance); } } class Cat{ private String name; public static int n=100; private static Cat cat; private Cat(String name) { System.out.println("构造器调用..."); this.name = name; } public static Cat getInstance(){ if (cat==null){ cat=new Cat("喵喵"); } return cat; } @Override public String toString() { return "Cat{" + "name='" + name + '\'' + '}'; } }
3、总结
饿汉式和懒汉式创建对象的时机不一样,饿汉式是在类加载的时候就创建了,懒汉式是在使用时才创建。