1.單例模式
- 保證隻有一個執行個體,在JVM中隻有一個Runtime。
- Runtime類分析
- 單例的類型:餓漢模式(加載就進行初始化)、懶漢模式(用的時候進行初始化)。
- 懶漢模式的雙重檢測
class Demo{
private static volatile Demo demo;
// 私有的構造方法
private Demo(){
}
public Demo getSiginTon(){
if(demo==null){// 如果不為空直接傳回
synchronized (Demo.class){// 加鎖
if(demo==null){//若是被其他線程初始化了,就不用在初始化了
demo = new Demo();
}
}
}
return demo;
}
}
2.靜态工廠模式
- 代替構造函數建立對象。
- Integer.valueOf(),Class.forName();(根據全限定類名建立類的執行個體)
- Integer.valueOf(int i)源碼分析
public static Integer valueOf(int i) {
//Integer對象會有對象緩存,在-128-127之間
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
3.抽象工廠模式
- 作用:建立某一種類的對象。
- JDK中展現:Java.sql包。
4.原型模式
- clone()方法。
- 存在深拷貝(内部類也進行拷貝)和淺拷貝(内部類需要new)。
5.擴充卡模式
- 作用:使不相容的接口相容。
- JDK中展現:InputStream、OutputStream。
6.裝飾器模式
- 作用:為類添加新的功能,防止類繼承帶來的類爆炸。
- JDK中展現:io類、Collections、List。
7.外觀模式
- 作用:封裝一組互動類,一直對外提供接口。
- JDK中展現:日志包。
8.享元模式
- 作用:共享對象、節省記憶體。
- JDK中展現:Integer和Long中對象緩存池、String常量池。
9.代理模式
作用:
(1)透明調用被代理對象,無須知道複雜實作細節;
(2)增加被代理類的功能;
- JDK中展現:動态代理。
10.疊代器模式
- 作用:将集合的疊代和集合本身分離。
- JDK中展現:Iterator
11.指令模式
- 作用:封裝操作,使接口一緻。
- JDK中展現:Runnable、Callable、ThreadPoolExecutor。
@FunctionalInterface
public interface Runnable {
public abstract void run();
}
@FunctionalInterface
public interface Callable<V> {
V call() throws Exception;
}