单例模式:1.饿汉式 2.懒汉式
饿汉式:
步骤如下:
1.构造器私有化(防止new)
2.类的内部创建对象
3.向外暴露一个静态的公共方法
个人理解:饿(等不及)就是已经创建好了对象等你来用
示例代码如下:
public class eTon {public static void main(String[] args){//第四步通过方法可以获取对象girlFiend instance1 = girlFiend.getInstance(); //可以理解为已经创建好了对象,就等你来拿System.out.println(instance1);girlFiend instance2 = girlFiend.getInstance(); //可以理解为已经创建好了对象,就等你来拿System.out.println(instance2);System.out.println(instance2 == instance1);}
}class girlFiend{private String name;//第一步构造器私有化private girlFiend(String name){this.name = name;}//第二步在类的内部直接创建对象private static girlFiend gf = new girlFiend("小美");//第三步向外暴露一个静态的公共方法public static girlFiend getInstance(){return gf;}}
懒汉式:
饿汉式可能会造成一个资源的浪费,比如创建了对象但没有使用
但是懒汉式可能会有线程风险
示例代码如下:
public class lTon {public static void main(String[] args){System.out.println(Cat.n1); //没创建实例,构造器不会被调用Cat c = Cat.getCat();//会创建实例,构造器会被调用}}class Cat{private String name;public static int n1 = 100;//第二步定义static静态对象private static Cat cat;//第一步构造器私有化private Cat(String name){System.out.println("构造器被调用");this.name = name;}//第三步提供一个public的static方法,可以返回一个Cat对象public static Cat getCat(){if(cat == null){cat = new Cat("cat");}return cat;}}