Java设计模式知识-笔记六

你熟悉那些设计模式?

总共有23种设计模式

总体来说设计模式分为三大类:

创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。

行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式

企业面试的时候,面试官非常喜欢考单例,而且非常喜欢考手写单例。


什么是单例?单例有那些写法?

单例分类:懒汉式单例、饿汉式单例
单例模式有以下特点:
1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。


1. 懒汉式单列

1.	//懒汉式单例类.在第一次调用的时候实例化自己   
2.	public class Singleton {  
3.	    private Singleton() {}  
4.	    private static Singleton single=null;  
5.	    //静态工厂方法   
6.	    public static Singleton getInstance () {  
7.	         if (single == null) {    
8.	             single = new Singleton();  
9.	         }    
10.	        return single;  
11.	    }  
12.	} 


2. 饿汉式单列

13.	//饿汉式单例类.在类初始化时,已经自行实例化   
14.	public class Singleton1 {  
15.	    private Singleton1() {}  
16.	    private static final Singleton1 single = new Singleton1();  
17.	    //静态工厂方法   
18.	    public static Singleton1 getInstance() {  
19.	        return single;  
20.	    }  
21.	}  

懒汉式与饿汉式区别?

从名字上来说,饿汉和懒汉,

饿汉就是类一旦加载,就把单例初始化完成,保证getInstance的时候,单例是已经存在的了,

而懒汉比较懒,只有当调用getInstance的时候,才回去初始化这个单例。

另外从以下两点再区分以下这两种方式:

 

1、线程安全:

饿汉式天生就是线程安全的,可以直接用于多线程而不会出现问题,

懒汉式本身是非线程安全的,为了实现线程安全有几种写法,分别是上面的1、2、3,这三种实现在资源加载和性能方面有些区别。

 

2、资源加载和性能:

饿汉式在类创建的同时就实例化一个静态对象出来,不管之后会不会使用这个单例,都会占据一定的内存,但是相应的,在第一次调用时速度也会更快,因为其资源已经初始化完成,

而懒汉式顾名思义,会延迟加载,在第一次使用该单例的时候才会实例化对象出来,第一次调用时要做初始化,如果要做的工作比较多,性能上会有些延迟,之后就和饿汉式一样了。




你可能感兴趣的:(Java面试题个人笔记)