在软件测试中,通常都是在功能测试稳定的状况下再进行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("执行压力测试"); } } }
运行结果设计
执行手工测试
执行自动化测试
执行压力测试