? ? ? ? 年年作品展,歲歲不相同,鵝黃新綠漣漪泛起思想的火花卻不盡相同。十期的作品展,從13年3月20號開始到完美落幕,時至今日,她已經在我的記憶中成為過去。這朵小小的浪花激起的漣漪漸漸褪去,或許已沒有或許,但那抹如琉璃般的記憶也在這片平靜中漸漸凝成永恒。當再次凝眸十一期的那群孩子,笑意淺淺,心事微瀾。
今天是十一期作品展的日子,看到她們多像去年的我。揣測激情與夢想來到這淡紫色蒲公英飛舞的土地。昨天晚上抽出時間去看了看十一期的作品展彩排,彩排的過程中,有五彩的燈光。有展示作品的大屏幕,投影儀,還有音響,在整個作品展示的過程中,十一期孩子的后勤人員中,有人負責關閉燈光和打開燈光。有人負責打開和關閉投影儀,一個個作品的銜接須要打開和關閉大屏幕,有的作品是音樂類的軟件。這個時候就要控制音量,打開和關閉音響,咦?這一連串的流程怎么會如此熟悉,猛然間,恍惚。這個儼然就是我們大話設計中的外觀模式啊。
? ? ? ? ?外觀模式,為子系統中的一組接口提供一個一致的界面,此模式定義了一個高層接口,這個接口使得這一子系統更加easy使用。首先我們來看一下我們外觀模式的結構圖:
? ? ? ??
? ? ? ?依舊以我們的上述十一期作品展為例,來看看我們的類圖:
? ? ? ?
? ? ? ?畫好了類圖。來看看我們代碼是怎樣實現的呢?我們先來看看燈光。投影儀。大屏幕。音響的代碼:
? ? ? ??
using System;
namespace Facade
{ /// <summary> // 投影儀 public class Projector { public void OpenProjector() { Console.WriteLine("打開投影儀"); }public void CloseProjector() { Console.WriteLine("關閉投影儀"); }}//燈光public class Light { public void OpenLight() { Console.WriteLine("打開燈光"); }public void CloseLight() { Console.WriteLine("關閉燈光"); } } //屏幕public class Screen { public void OpenScreen() { Console.WriteLine("打開屏幕"); }public void CloseScreen() { Console.WriteLine("關閉屏幕"); } } //音響public class Acoustics { public void Acoustics () { Console.WriteLine("打開音響"); }public void CloseAcoustics () { Console.WriteLine("關閉音響"); } }
}
? ? ? ? ?外觀類中的代碼: public class ProductionFacade { /// 在外觀類中必須保存有子系統中各個對象 private Projector projector; private Light light; private Screen screen; private Acoustics acoustics; public ProductionFacade() { projector = new Projector(); light = new Light(); screen = new Screen(); acoustics=new Acoustics();}/// <summary> /// 作品開始/// <summary> public void OpenProduction() { //先打開燈光light.OpenLight(); //打開投影projector.OpenProjector(); //再打開屏幕 screen.OpenScreen(); //再打開音響acoustics.OpenAcoustics(); }/// <summary> /// 作品結束/// </summary> public void CloseProduction() { //關閉燈光light.CloseLight(); //關閉投影projector.CloseProjector(); //關閉屏幕 screen.CloseScreen(); //關閉音響acoustics.CloseAcoustics(); }}
}
? ? ? ? ?client的代碼: static void Main(string[] args) { Facade.ProductionFacade movie = new Facade.ProductionFacade(); Facade.Projector projector = new Facade.Projector();//首先是觀看作品 movie.OpenProduction();Console.WriteLine();//最后就是關閉作品了 movie.CloseProduction();Console.ReadKey(); }
? ? ? ?簡單的說,就是外觀模式將一個或者多個類的復雜的操作進行了隱藏。只顯示一個一致的界面供client使用。須要注意的是。外觀模式不過給我們提供了更為直接和easy地操作方式,她并沒有把原來的子系統進行隔離。所以,假設你還須要子系統類的更高層的功能,還是能夠使用原來的子系統,這個是外觀模式的一大長處,通過外觀模式能夠將子系統的接口上建立一個高層接口,而且將這個高層接口提供給client使用,這樣便開業解除掉client和復雜子系統之間的耦合。 ? ? ? ? ?十一期的作品展今天晚上在學府拉開序幕。祝福你們。愿這朵小小的浪花在IT的海洋里激起驚濤駭浪,我的大話設計依舊在繼續........