设计模式
为什么要学习这个设计模式呢?其实刚学习的时候,也没有多加考虑,只是在学习过程中,了解到我们的设计过程中,必然会产生一些编码规范和习惯,而这些习惯和规范,就由国外的GoF (Goup of four)四人帮组合,编写和统计而成。一共有23中设计模式。太多太多,后面会就几个比较典型的设计模式进行学习和讲解。
饿汉模式
听听名字就知道,是一个十分急切的设计模式,而它的特点就是在对象初始化时便加载出来,结构如下:
public class HungryMan {
private HungryMan ( ) {
}
private final static HungryMan hungryman = new HungryMan ( ) ;
private static HungryMan getInstance ( ) {
return hungryman;
}
private int [ ] arr = new int [ 1024 ] ;
private int [ ] arr1 = new int [ 1024 ] ;
private int [ ] arr2 = new int [ 1024 ] ;
}
懒汉模式
懒汉和饿汉又有了本质的区别,懒汉主要是懒惰,也就是加载变量不会像饿汉一样。 【补充】一个对象被new之后经历了三个过程:
1、分配内存空间
2、加载构造函数,初始化值
3、将对象指向该内存空间
public class LazyMan {
private LazyMan ( ) {
System . out. println ( Thread . currentThread ( ) . getName ( ) + "ok" ) ;
}
private volatile static LazyMan lazyMan;
public static LazyMan getInstance ( ) {
lazyMan = new LazyMan ( ) ;
return lazyMan;
}
}
以上为懒汉模式,需要使用时,只需要调用getInstance()方法,进行对象的创建。 上面的模式会出现一个问题,就是我们的多线程情况下的安全问题。
public class LazyMan {
private LazyMan ( ) {
System . out. println ( Thread . currentThread ( ) . getName ( ) + "ok" ) ;
}
private volatile static LazyMan lazyMan;
public static LazyMan getInstance ( ) {
if ( lazyMan== null ) {
synchronized ( LazyMan . class ) {
if ( lazyMan== null ) {
lazyMan = new LazyMan ( ) ;
}
}
}
return lazyMan;
}
}
上面是我们对其加入的synchronized锁,将类对象锁住,并且在内外添加了两层判断机制,确保我们的加载不会出现多次加载,且加载的对象不同。并且我们添加了volatile关键字在类对象前面,确保我们的对象可见性和指令不可重排等。
结语:
本次总结内容不多,但是个人理解比较通透,希望有所帮助。 提前批还未打算尝试,最近的目标就是设计模式、JUC和spring ,加油哦!