外观模式(Facade):为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更容易使用。
1、在设计初级阶段,应该要有意识的将不同的两个层分离。
2、层与层之间建立外观Facade,为复杂的子系统提供一个简单的接口,使得耦合大大降低。
3、在开发阶段,子系统往往因为不断的重构演化而变得越来越复杂。
4、增加 Facade可以提供一个简单的接口,减少他们之间的依赖。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 using System;
2 using System.Collections.Generic;
3 using System.Text;
4
5 namespace Facade
6 {
7 class Program
8 {
9 static void Main(string[] args)
10 {
11 Facade facade = new Facade();
12 facade.MethodA(); //由于Facade的作用,客户端可以根本不知道SubSystemOne,SubSystemTwo等。
13 Console.ReadLine();
14 }
15 }
16 class Facade
17 {
18 SubSystemOne one;
19 SubSystemTwo two;
20 SubSystemThree three;
21 public Facade()
22 {
23 one = new SubSystemOne();
24 two = new SubSystemTwo();
25 three = new SubSystemThree();
26 }
27 public void MethodA()
28 {
29 Console.WriteLine("方法组A()----");
30 one.MethodOne();
31 two.MethodTwo();
32 three.MethodThree();
33 }
34 }
35 class SubSystemOne
36 {
37 public void MethodOne()
38 {
39 Console.WriteLine("子系统方法一");
40 }
41 }
42 class SubSystemTwo
43 {
44 public void MethodTwo()
45 {
46 Console.WriteLine("子系统方法二");
47 }
48 }
49 class SubSystemThree
50 {
51 public void MethodThree()
52 {
53 Console.WriteLine("子系统方法三");
54 }
55 }
56 }
2 using System.Collections.Generic;
3 using System.Text;
4
5 namespace Facade
6 {
7 class Program
8 {
9 static void Main(string[] args)
10 {
11 Facade facade = new Facade();
12 facade.MethodA(); //由于Facade的作用,客户端可以根本不知道SubSystemOne,SubSystemTwo等。
13 Console.ReadLine();
14 }
15 }
16 class Facade
17 {
18 SubSystemOne one;
19 SubSystemTwo two;
20 SubSystemThree three;
21 public Facade()
22 {
23 one = new SubSystemOne();
24 two = new SubSystemTwo();
25 three = new SubSystemThree();
26 }
27 public void MethodA()
28 {
29 Console.WriteLine("方法组A()----");
30 one.MethodOne();
31 two.MethodTwo();
32 three.MethodThree();
33 }
34 }
35 class SubSystemOne
36 {
37 public void MethodOne()
38 {
39 Console.WriteLine("子系统方法一");
40 }
41 }
42 class SubSystemTwo
43 {
44 public void MethodTwo()
45 {
46 Console.WriteLine("子系统方法二");
47 }
48 }
49 class SubSystemThree
50 {
51 public void MethodThree()
52 {
53 Console.WriteLine("子系统方法三");
54 }
55 }
56 }