引言:
项目在做数据迁移时,因为数据结构从FormatOld调整成了FormatNew,所以对数据的读取方式发生了变化,而迁移过程持续比较久,所以在读取数据时需要对两种数据格式兼容。
比如客户类Client,在数据读取时都需要先读FormatNew,如果FormatNew中无数据时,再访问FormatOld,如果只有一个Client类时,可以直接在Client类中写成以下方式:
if (FormatNew.Exit)
{
Visit FormatNew
}
else
{
Visit FormatOld
}
如果有多个Client,这时如果在每个类中都用上面的方式访问的话,代码会多次被复制,于是我们可以做以下封装:
VisitFormatInterface()
{
if (FormatNew.Exit)
{
Visit FormatNew
}
else
{
Visit FormatOld
}
}
这样,无论有多少个Client类,都只要访问这个接口就可以了,另一个好处时,当这个接口调整时,所有的Client类都不用修改,只要重编即可。
应用场景 :
Facade模式适用于把一个复杂的系统分成两层,上层为客户类,下层为复杂的子系统,而中间通过通用的接口处理,如下所示
ClientA ClientB ClientC
/ | /
/ | /
/ | /
Facade
|
|--------------------------|
| Sub System |
|--------------------------|
优点:
1. 分层模式,系统结构更清晰
2. 上层无需关心子系统实现,子系统任意变更只要调用方式没有改变,上层代码则无需改变
3. 提供给上层的不一定是接口,还可以是对接口进行封装的类,这一点要注意
代码示例:
(电脑坏了,可执行代码后续补充)