標籤:介面 nts 調用 log 安全執行緒 設計 餓漢式 value single
第一式 面板模式
定義:為子系統的一組介面提供一個一致的介面,面板模式定義了一個高層介面,這一介面使得這一子系統更加容易使用。
優點:鬆散耦合 簡單易用 更好地劃分訪問的層次
缺點:不應過度使用
本質:封裝互動 簡單調用
public interface testA { public void test();}public interface testB { public void test();}public interface testC { public void test();}public class concreteTestA implements testA { @Override public void test() { // TODO Auto-generated method stub System.out.println("test A"); }}public class concreteTestB implements testB { @Override public void test() { // TODO Auto-generated method stub System.out.println("test B"); }}public class concreteTestC implements testC { @Override public void test() { // TODO Auto-generated method stub System.out.println("test C"); }}public class facade { public void test() { testA ta = new concreteTestA(); ta.test(); testB tb = new concreteTestB(); tb.test(); testC tc = new concreteTestC(); tc.test(); }}public class user { public static void main(String[] args) { // TODO Auto-generated method stub facade fc = new facade(); fc.test(); }}
第二式 適配器模式
定義:將一個類的介面轉換成客戶希望的另外一個介面。適配器模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。
優點:更好地複用性 更好地可擴充性
缺點:使用過多,會使系統更加淩亂,不容易整體進行把握
本質:轉換匹配 複用功能
public interface target { public void request();}public class adaptee { public void request() { System.out.println("adaptee test"); }}public class adapter implements target { adaptee apt = null; public adapter(adaptee apt) { this.apt = apt; } @Override public void request() { // TODO Auto-generated method stub apt.request(); }}public class user { public static void main(String[] args) { adaptee adp = new adaptee(); target tar = new adapter(adp); tar.request(); }}
第三式 單例模式
定義:保證一個類僅有一個執行個體,並提供一個訪問他的全域訪問點。懶漢式是時間換空間,餓漢式是空間換時間。線上程安全方面,不加同步的懶漢式是線程不安全的,而餓漢式則是安全執行緒的。單例模式的實質在於控制執行個體數目,而在叢集中使用單例模式則需要注意安全問題。推廣:緩衝的實現--空間換時間。
懶漢式:
public class singleton { private static singleton instance = null; private singleton() { } public static singleton getInstance() { if (instance == null) { instance = new singleton(); } return instance; } }
餓漢式:
public class singleton { private static singleton instance = new singleton(); private singleton() { } public static singleton getInstance() { return instance; } }
緩衝的基本實現
public class javaCache { private static Map<String, Object> instance = null; public Object getInstance(String key) { Object object = instance.get(key); if (object == null) { object = key + ", value"; instance.put(key, object); } return object; } }
枚舉類型也是實現單例模式的一種選擇。另外,還可以通過一種類級內部類的方式來實現單例模式。
public class singleton { private static class instanceHolder { private static singleton instance = new singleton(); } private singleton() { } public static singleton getInstance() { return instanceHolder.instance; } }
這裡需要解釋補充一下:類級內部類
-類級內部類就是由static修飾的成員式內部類,沒有static修飾的稱為對象式內部類。-類級內部類可以直接建立,而對象級內部類需要綁定在外部類的成員變數上。-類級內部類可以實現靜態方法,靜態方法可以用外部類的靜態方法和靜態成員變數。-類級內部類相當與外部類的成員,因此在第一次使用的時候載入。安全問題:JVM在下列情況自動實現了同步-靜態初始化器初始化資料時-訪問final欄位時-在建立線程之前建立對象時-線程可以看到它將要處理的對象時因此,利用類級內部類來實現消極式載入,通過JVM自身來保證安全執行緒則是實現的基本思路。
java物件導向與設計模式(二)