一.简单说下单例多例区别
1.单例设计模式
1.解释:从名称上来讲,可以看出,它不能说是一种技术.而是一种书写代码时的设计理念
2.实例化次数:在一个工程中只实例化一次
3.分类:懒汉式和饿汉式
懒汉时:什么时候用,什么时候去实例化
饿汉时:项目启动后就加载
2.多例模式
1.解释:我们常说的多例模式,个人认为,只是为区分单例才这么叫的,项目中天天new来new去的对象,就是多例的
2.实例化次数:超过1次
二.单例模式中:懒汉式和饿汉式的示例代码(建议自己敲一遍实施,我用的junit测试)
1.饿汉式
public class TestEntity {
private TestEntity(){
System.out.println("实例化了才会走:我走了吗?");
}
private static TestEntity t = new TestEntity();
public static TestEntity getInstance() {
return t ;
}
public static void test(){
System.out.println("测试方法调用了我");
}
}
@Test
public void testOne() {
TestEntity.test();
}
输出结果:
实例化了才会走:我走了吗?
测试方法调用了我
两条打印语句,我们并没有在Junit测试类中对这个对象实例化(new对象),,证实了,他在我们调用之前自己早就早就实例化了
2.懒汉时
public class TestEntity2 {
private TestEntity2(){
System.out.println("实例化了才会走:我走了吗?");
}
private static TestEntity2 t2 = null;
public static TestEntity2 getInstance() {
return t2 == null? new TestEntity2(): t2;
}
public static void test(){
System.out.println("测试方法调用了我");
}
}
@Test
public void testTwo() {
TestEntity2.test();
}
输出结果:
测试方法调用了我
我们发现,构造方法中的语句,并没有打印出来,说明此时这个对象并没有实例化
@Test
public void testTwo() {
TestEntity2.getInstance();
TestEntity2.test();
}
输出结果:
实例化了才会走:我走了吗?
实例化了才会走:我走了吗?
测试方法调用了我
两条语句打印出来,说明我们手动实例化成功,这个时候,这个对象,就可以使用了
对之前有人问过我的一个问题,简单说一下,就是之前有个小伙伴(初学者)问我:为什么说只能实例化一次了?
两点:第一,private 构造方法,无法new了
第二:三目运算符做出了判断
知道大家都技术高深,这里结尾最后一段仅是告知那些同样没基础,刚开始玩java的小伙伴们的