单例模式:1.饿汉式 2.懒汉式
饿汉式:
步骤如下:
1.构造器私有化(防止new)
2.类的内部创建对象
3.向外暴露一个静态的公共方法
个人理解:饿(等不及)就是已经创建好了对象等你来用
示例代码如下:
java
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;
}
}
懒汉式:
饿汉式可能会造成一个资源的浪费,比如创建了对象但没有使用
但是懒汉式可能会有线程风险
示例代码如下:
java
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;
}
}