設計模式之外觀模式

1 概述

  外觀模式提供了一個統一的接口,用來訪問子系統中的一羣接口。這樣可以避免客戶端和子系統之間的緊耦合。

  這種模式需要將一系列的子系統組合到外觀中,然後將具體的工作交給各個子系統去完成。如此一來,可以簡化接口的調用。

  其本質就是將系統與客戶端交互的地方封裝起來。

2 示例

    這個模式,總體來說,很簡單,理解起來也不困難。

    依然以手機爲例,手機開機的時候,我們只需要按一下電源鍵,在電源鍵的觸發事件中,包含了CPU的開啓、系統加載、SIM卡信息加載等。如果把每一個模塊的接口都暴露出來,讓我們一個個去按,那豈不是太坑爹了。而現在我們只需要一個開機接口,就可以實現上述所有模塊的通電、加載功能,這就是外觀模式的功效。

    首先把開機需要用到的模塊以及其加載方法定義一下。

CPU:

 1 package org.scott.facade;
 2 /** 
 3  * @author Scott
 4  * @date 2013-12-9 
 5  * @description
 6  */
 7 public class CPU {
 8     public void start(){
 9         System.out.println("CPU has started ...");
10     }
11 }


SIM卡:

 1 package org.scott.facade;
 2 /** 
 3  * @author Scott
 4  * @date 2013-12-9 
 5  * @description
 6  */
 7 public class SIM {
 8     public void start(){
 9         System.out.println("SIM card has loaded ...");
10     }
11 }


系統UI:

 1 package org.scott.facade;
 2 /** 
 3  * @author Scott
 4  * @date 2013-12-9 
 5  * @description
 6  */
 7 public class UI {
 8     public void start(){
 9         System.out.println("UI has loaded successfully ...");
10     }
11 }


    所有子系統的操作都封裝到我們的外觀類中,也就是下面的Phone:

 1 package org.scott.facade;
 2 /** 
 3  * @author Scott
 4  * @date 2013-12-9 
 5  * @description
 6  */
 7 public class Phone {
 8     private CPU cpu;
 9     private SIM sim;
10     private UI ui;
11     
12     public Phone(){
13         cpu = new CPU();
14         sim = new SIM();
15         ui = new UI();
16     }
17     
18     public void start(){
19         System.out.println("The phone is starting ...");
20         cpu.start();
21         sim.start();
22         ui.start();
23         System.out.println("Phone has started successfully!");
24     }
25 }

  

  也就是這麼回事,來個測試類客戶端,開機:

 1 package org.scott.facade;
 2 /** 
 3  * @author Scott
 4  * @date 2013-12-9 
 5  * @description
 6  */
 7 public class FacadeTest {
 8 
 9     public static void main(String[] args) {
10         Phone phone = new Phone();
11         phone.start();
12     }
13 
14 }


啓動結果:

The phone is starting ...
CPU has started ...
SIM card has loaded ...
UI has loaded successfully ...
Phone has started successfully!


  外觀模式適配模式不同,適配器模式是把當前類或者對象、接口轉變成符合其他條件的東西,而外觀模式是解決類與類之間的依賴關係的,用來提供子系統的一個簡化接口。   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章