Posts Facade模式-隐藏细节
Post
Cancel

Facade模式-隐藏细节

Facade模式,每个人都在不知不觉地使用这个模式,它没有什么复杂的概念和技巧,其实类似一站式服务中心,或者像房产中介,它把后面的所有流程细节对调用者全部隐藏了。调用者无须知道复杂的细节,所有的事情交给一站式服务中心处理即可。

调用者有两种方式和一站式服务中心打交道:

  • 知道具体功能的对象,把对象告诉服务中心

  • 不知道有哪些对象,全权让服务中心处理

复杂系统的多个对象

比如有两个功能对象:

1
2
3
4
5
6
7
public class SubsystemA
{
  public void DoA()
  {
    Console.WriteLine("do A");
  }
}

.

1
2
3
4
5
6
7
public class SubsystemB
{
  public void DoB()
  {
    Console.WriteLine("do B");
  }
}

调用者使用他们时,必须亲自调用他们的方法。

1
2
3
4
SubsystemA a = new SubsystemA();
a.DoA();
SubsystemB b = new SubsystemB();
b.DoB();

一站式服务中心

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Facade
{
  SubsystemA a;
  SubsystemB b;
  public Facade(SubsystemA a, SubsystemB b)
  {
    this.a = a;
    this.b = b;
  }

  public Facade()
  {
    a = new SubsystemA();
    b = new SubsystemB();
  }

  public void Do()
  {
    a.DoA();
    b.DoB();
  }
}

调用者只需要和这个服务中心打交道就可以了。

要么:

1
2
3
4
5
// new way 1
SubsystemA a1 = new SubsystemA();
SubsystemB b1 = new SubsystemB();
Facade f1 = new Facade(a1, b1);
f1.Do();

要么:

1
2
3
// new way 2
Facade f2 = new Facade();
f2.Do();

优缺点

优点也就是缺点。正因为调用者完全对后面的子功能的细节完全不知情,所以当在第一种调用情况下,一旦后端子功能变化(增加或者减少),调用者也不得不被动地做修改。

This post is licensed under CC BY 4.0 by the author.

Decorator模式-用装修的概念自由组合功能

State模式-用类来表示物体的状态