天天看點

從Java中JDK中學習設計模式1.單例模式2.靜态工廠模式3.抽象工廠模式4.原型模式5.擴充卡模式6.裝飾器模式7.外觀模式8.享元模式9.代理模式10.疊代器模式11.指令模式

1.單例模式

  • 保證隻有一個執行個體,在JVM中隻有一個Runtime。
  • Runtime類分析
    從Java中JDK中學習設計模式1.單例模式2.靜态工廠模式3.抽象工廠模式4.原型模式5.擴充卡模式6.裝飾器模式7.外觀模式8.享元模式9.代理模式10.疊代器模式11.指令模式
  • 單例的類型:餓漢模式(加載就進行初始化)、懶漢模式(用的時候進行初始化)。
  • 懶漢模式的雙重檢測
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;
}