標籤:style blog http color os 使用 ar strong 2014
面板模式定義:提供一個統一的介面,用來訪問子系統中的一群介面。外觀定義了一個高層介面,讓子系統更容易使用。
面板模式可以用來簡化介面,之所以稱其為“外觀”,是因為一般外觀是用來展現給使用者的,所以一般外觀都做得比較簡單時尚,用來隱藏後面複雜的邏輯。
比如很多電腦都有“一鍵影音”功能,當按下“一鍵影音”鍵的時候,電腦需要調整音效,音量,螢幕亮度等等。這裡可能會讓人聯想到“命令模式”,但是我們這裡不關注命令的傳遞,而是關注具體如何執行。 我們可以在一個具體的類中預定義一組操作(包括各個影音器件的開啟功能),當這個類的某個方法被觸發的時候,這些功能的開啟方法都會被觸發,從而就達到了簡化的目的。外觀展現給使用者的只需要執行個體化這個具體的類,然後調用相應的啟動方法,而無需手動開啟每一個器件。 針對這個例子的具體編碼如下:
1 /** 2 * 聲音介面 3 * @author Apache_xiaochao 4 * 5 */ 6 public interface Voice { 7 8 /** 9 * 開啟聲音10 */11 void on();12 /**13 * 關閉聲音14 */15 void off();16 17 }
1 /** 2 * 螢幕介面 3 * @author Apache_xiaochao 4 * 5 */ 6 public interface Screen { 7 8 /** 9 * 調亮螢幕10 */11 void dodge();12 /**13 * 調暗螢幕14 */15 void dimming();16 17 }
/** * 電腦聲音類 * @author Apache_xiaochao * */public class PCVoice implements Voice { @Override public void on() { System.out.println("開啟聲音!"); } @Override public void off() { System.out.println("關閉聲音!"); }}
/** * 電腦螢幕類 * @author Apache_xiaochao * */public class PCScreen implements Screen { @Override public void dodge() { System.out.println("亮度增加!"); } @Override public void dimming() { System.out.println("亮度降低!"); }}
上面是一些基礎類,下面是面板模式的主角:
1 /** 2 * 一鍵影音 3 * 4 * @author Apache_xiaochao 5 * 6 */ 7 public class OnekeyTheater { 8 9 private Voice voice;10 private Screen screen;11 12 public OnekeyTheater(Voice voice, Screen screen) {13 super();14 this.voice = voice;15 this.screen = screen;16 }17 18 /**19 * 開啟一鍵影音功能20 */21 public void start() {22 voice.on();23 screen.dodge();24 }25 26 /**27 * 關閉一鍵影音功能28 */29 public void close() {30 voice.off();31 screen.dimming();32 }33 34 }
1 public class Driver { 2 3 public static void main(String[] args) { 4 Voice voice = new PCVoice(); 5 Screen screen = new PCScreen(); 6 OnekeyTheater onekeyTheater = new OnekeyTheater(voice, screen); 7 onekeyTheater.start(); //在這裡可以進行一鍵操作,同時觸發多個裝置 8 onekeyTheater.close(); //在這裡可以進行一鍵操作,同時關閉多個裝置 9 }10 11 }面板模式的意圖是要提供一個簡單的介面,好讓一個子系統更便於使用。當需要簡化並統一一個很大的介面或者一群複雜的介面時,使用面板模式。
設計模式——面板模式