在軟件測試中,通常都是在功能測試穩定的狀況下再進行UI自動化測試、或者進行性能測試。若是一個一個進行太麻煩,此時可使用對外提供一個簡單接口,經過這個接口能夠訪問內部一羣接口。例如進行UI自動化測試, 那麼執行功能測試後再執行自動化測試。在軟件開發過程當中,將對外提供了一個統一的接口,用來訪問子系統中的一羣接口的模式稱爲外觀模式。這種模式能夠應對客戶端程序與複雜系統的內部子系統進行耦合而致使客戶端程序隨着子系統的變化而變化,將複雜系統的內部子系統與客戶端之間的依賴解耦。設計模式
外觀模式(Facade Pattern)是一種結構型設計模式, 能爲複雜系統、 程序庫或框架提供一個簡單 (但有限) 的接口。框架
外觀定義了一個高層接口,讓子系統更容易使用。使用外觀模式時,咱們建立了一個統一的類,用來包裝子系統中一個或多個複雜的類,客戶端能夠直接經過外觀類來調用內部子系統中方法,從而外觀模式讓客戶和子系統之間避免了緊耦合。性能
外觀角色(Facade):在客戶端能夠調用它的方法,在外觀角色中能夠知道相關的(一個或者多個)子系統的功能和責任;在正常狀況下,它將全部從客戶端發來的請求委派到相應的子系統去,傳遞給相應的子系統對象處理。
子系統角色(SubSystem Classes):在軟件系統中能夠有一個或者多個子系統角色,每個子系統能夠不是一個單獨的類,而是一個類的集合,它實現子系統的功能;每個子系統均可以被客戶端直接調用,或者被外觀角色調用,它處理由外觀類傳過來的請求;子系統並不知道外觀的存在,對於子系統而言,外觀角色僅僅是另一個客戶端而已。測試
例如咱們實現引言中提到的手動測試、自動化測試、性能測試。spa
using System;
namespace Facade { class Program { /// <summary> /// 若是不使用外觀模式,則須要調用三次測試執行 /// 此時客戶端只須要調用外觀類中的方法就能夠了,簡化了客戶端的操做 /// </summary> /// <param name="args"></param> static void Main(string[] args) { StartTest test = new StartTest(); test.start(); Console.Read(); } } /// <summary> /// 外觀類,開始測試 /// </summary> public class StartTest { private ManuaTest manua; private AutoTest auto; private StressTest stress; public StartTest() { manua = new ManuaTest(); auto = new AutoTest(); stress = new StressTest(); } public void start() { manua.test(); auto.test(); stress.test(); } } /// <summary> /// 子系統類A,手工測試 /// </summary> public class ManuaTest { public void test() { Console.WriteLine("執行手工測試"); } } /// <summary> /// 子系統類B,自動化測試 /// </summary> public class AutoTest { public void test() { Console.WriteLine("執行自動化測試"); } } /// <summary> /// 子系統類C,壓力測試 /// </summary> public class StressTest { public void test() { Console.WriteLine("執行壓力測試"); } } }
運行結果設計
執行手工測試
執行自動化測試
執行壓力測試