人的知识就好比一个圆圈,圆圈里面是已知的,圆圈外面是未知的。你知道得越多,圆圈也就越大,你不知道的也就越多。

0%

设计模式--外观模式

定义

外观模式提供了一个统一的接口,用来访问子系统中的一群接口。外观模式定义了一个高层接口,让子系统更容易实现。

角色

  • 外观(Facade):提供一个外观接口,对外,它提供一个易于客户端访问的接口,对内,它可以访问子系统中的所有功能。
  • 子系统(Subsystem):子系统在整个系统中可以是一个或多个模块,每个模块都有若干类组成,这些类可能相互之间有着比较复杂的关系。

类图

Facade UML

实现

1
2
3
4
5
6
7
8
9
public class Facade {
private SubsystemA systemA;
private SubsystemB systemB;
private SubsystemC systemC;

public void operation() {
// system A、B、C operations
}
}

优缺点

优点

  • 减少系统相互依赖
  • 提高了灵活性
  • 提高了安全性

缺点

  • 不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。

适用场景

  • 为复杂的模块或子系统提供外界访问的模块
  • 子系统相对独立
  • 预防低水平人员带来的风险

模式应用

Spring IoC

Spring IoC容器中的ApplicationContext同时实现了多个接口,并通过引用这些接口的实例,对外统一提供:加载配置、解析资源、创建Bean、提供环境、启动流程等功能,客户代码只需要操作context就可以获取spring的提供的功能,而无需关心内部的细节。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory,
MessageSource, ApplicationEventPublisher, ResourcePatternResolver {

@Nullable
String getId();

String getApplicationName();

String getDisplayName();

long getStartupDate();

@Nullable
ApplicationContext getParent();

AutowireCapableBeanFactory getAutowireCapableBeanFactory() throws IllegalStateException;

}

实际应用

controller、service可以理解为就是门面模式的运用。

小礼物走一走,来 Github 关注我