今天在翻设计模式,火鸡鸭子嘎嘎叫。原来我一直在用外观模式,一不小心还用成了上帝模式 😂
这种模式比较简单,不贴伪代码了
外观模式是一种结构型设计模式, 能为程序库、 框架或其他复杂类提供一个简单的接口。
简单粗暴理解:A( ) B( ) C(A( )B( ))
外观类为包含许多活动部件的复杂子系统提供一个简单的接口。 与直接调用子系统相比, 外观提供的功能可能比较有限, 但它却包含了客户端真正关心的功能。
举个例子: “小爱同学,我要看电视”。然后小爱就打开电视,打开暖气,打开氛围灯。。。
学术一点:使用单个外观类隔离多重依赖,create一个封装所需功能并隐藏其他代码的外观类, 从而无需使全部代码直接与数十个框架类进行交互。 该结构还能将未来框架升级或更换所造成的影响最小化, 因为你只需修改程序中外观方法的实现即可。
实现方式
-
考虑能否在现有子系统的基础上提供一个更简单的接口。 如果该接口能让客户端代码独立于众多子系统类, 那么你的方向就是正确的。
-
在一个新的外观类中声明并实现该接口。 外观应将客户端代码的调用重定向到子系统中的相应对象处。 如果客户端代码没有对子系统进行初始化, 也没有对其后续生命周期进行管理, 那么外观必须完成此类工作。
-
如果要充分发挥这一模式的优势, 你必须确保所有客户端代码仅通过外观来与子系统进行交互。 此后客户端代码将不会受到任何由子系统代码修改而造成的影响, 比如子系统升级后, 你只需修改外观中的代码即可。
-
如果外观变得过于臃肿, 你可以考虑将其部分行为抽取为一个新的专用外观类。
外观模式优缺点
- 你可以让自己的代码独立于复杂子系统。
- 外观可能成为与程序中所有类都耦合的上帝对象。指的是一个上帝干的事情特别多,最后耦合度相当高。