简介:
外观模式很简单,哪怕你没学过,你在工作中也用过,它就是对一个系统中的多个类里的接口进行了一层封装。
优点:
遵从了迪米特法则,即最少知道原则,你用户不用也无需知道那么多,我给你提供最简单接口,你调用就行。并且使得代码看起来简洁、结构明确、易读。
缺点:
违背了开闭原则,就是说如果子系统需要添加新类,那么需要修改封装类Facade。
结构:
例子及代码:
假设有这样的场景:村东头有一家专做小龙虾的A店,存南头有一家专门烤生蚝的B店,隔壁村有一家专门做铁板大鱿鱼的C店。
问:如果张三只想吃任意一家店,OK,他走着去就行。但是如果他想三家店依次吃个遍,不行了,太远,肿么办?
答:村长想了个好办法,村长开了个美食街,三家店都搬到美食街了,张三只需溜溜达达到美食街,就可以吃到三家美食了。
这个美食街,就是外观类Facade,而三家店,就是子系统的三个类。
小龙虾类:
生蚝类:
铁板鱿鱼类:
美食街类(外观类):
此类里需要提供封装子系统各类接口的接口
main函数及调用:
最终结果显示:
写在最后:
有人说为啥要弄个封装类呢?我每次需要哪个接口,就建一个其所在类的对象,一调用不就好了。
其一:为了美观,要不为啥叫“外观”模式?
其二:当要调用的类数量少的时候当然可以,如本文中张三逛美食街的例子,只有三个类三个店。现在不是美食街了,是美食城,里面有几十甚至几百的店,映射到代码中就是几百个类,你每次调用都要建一个其类对象吗。还不如直接封到美食城类里,直接美食城的类对象调用多好。