前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >实战设计模式系列-Facade(外观)

实战设计模式系列-Facade(外观)

作者头像
王亚昌
发布2018-08-03 15:45:22
3170
发布2018-08-03 15:45:22
举报
文章被收录于专栏:王亚昌的专栏

引言:

项目在做数据迁移时,因为数据结构从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.  提供给上层的不一定是接口,还可以是对接口进行封装的类,这一点要注意

代码示例:

 (电脑坏了,可执行代码后续补充)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2010年02月25日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档