设计模式学习之facade模式

原来还有设计模式这么一个东西, 接触面向对象语言有两年多了, 居然都不知道, 也难怪为什么自己面试会被各种拒绝了。这也跟自己学习的不求甚解有关系。怎么说呢, 就像那个学了一二三就说自己已经学会了知识一样,浅尝辄止。

好了,废话少说, 开始学习吧。

首先来复习一下什么是设计模式吧。有一个建筑设计师Alexander对模式的定义是“在某一背景下某个问题的一种解决方案”。

那么为什么要学习设计模式?1:复用解决方案;2:确立通用术语;3:易于修改和维护。

对于这点我深有体悟, 前几天去面试的时候被问到从观察者视角来阐述一个问题。然后我当时就被问倒了(请勿取笑)。然后还得麻烦面试官苦口婆心的跟我解释了半天。~~~好吧, 于是乎才了解了设计模式这个东西,然后才开始学习。

面向对象设计策略的三个建议:1:按接口编程;2:尽量用聚合替代继承;3:封装“变化”。(参考《设计模式》)。

关于其他的也不多说了,下面开始进入正题吧,Facade模式(门面模式)。

“为子系统中的一组接口提供一个统一接口。Facade模式定义了一个更高层的接口, 使子系统更加容易使用。”这是在《设计模式》一书中给出的Facade模式的定义。

话说没有接触设计模式的时候对概念这些看得都是一头雾水, 不知道是不是自己太笨了。哈哈,相信也有很多人跟我一样看不懂。

举个简单的例子吧。 我经常约MM一起去“啃不起”吃快餐(ps:一直在单身,请允许我幻想一下吧), 然后我们经常点的是薯条汉堡和可乐, 每次我们都要把三个都说一遍,很麻烦吧。 然后“啃不起”的Boss经过统计发现很多人都喜欢点这个“配搭”,于是他们推出了一个组合套餐, 包括了薯条汉堡和可乐,美其名曰“XX大套餐”。 于是我以后跟MM一起去就可以直接跟服务员说给我来一个“XX大套餐”, 怎么样?是不是方便多了呢?

上面的例子“XX大套餐”相当于一个新的接口,把“薯条”、“汉堡”、“可乐”三个接口封装成了一个接口,即相当于一个门面一样。

本来还想上张图的, 但是画图实在是画不好, visio和rational rose都画不太好,不过这个自己百度搜图搜一下会有很多,看一下也就明白了。

ps:上述例子中的服务员其实也就相当于了一个门面,不过考虑的角度不一样~~~

Facade模式关键特征:(摘自《设计模式解析》)

意图:希望简化原有系统的使用方式,需要定义自己的接口。

问题:只需要使用系统的子集、或者需要以一种特殊的方式与系统交互。

解决方案:Facade模式提供了一个新的接口。

参与者与协作者: 接口本身和各个子系统。

效果:简化了对所需子系统的访问过程。但是功能并不完整。

实现:定义一个(或多个)具备所需功能的新类。让新类使用原有的系统。

好吧,大概就这些了,Facade模式属于比较简单的模式,也比较好懂了,希望接下去的模式不会把自己难倒。

blog comments powered by Disqus