设计模式之外观模式(Facade)

提示:设计模式与游戏完美开发

目录

前言

一、外观模式(Facade)的定义

二、外观模式(Facade)的说明

三、外观模式(Facade)的实现说明


前言

外观模式(Facade)

        其实,外观模式(Facade)是在生活中最容易碰到的模式。当我们能够利用简单的行为来操作一个复杂的系统时,当下所使用的接口,就是以外观模式(Facade)来定义的高级接口。


一、外观模式(Facade)的定义

外观模式(Facade)在GoF的解释是:

        “为子系统定义依据统一的接口,这个高级的接口会让子系统更容易被使用”。

        以驾驶汽车为例,当驾驶者能够开着一辆汽车在路上行走,汽车内部还必须由许多的子系统一起配合才能完成汽车行走这项功能,这些子系统包含引擎系统,传动系统,悬吊系统,车身骨架系统,电装系统等.但对于客户端(驾驶者)而言,并不需要了解这些子系统是如何协调工作的,驾驶者只需要通过高级接口(方向盘,踏盘,仪表盘)就可以轻易操控汽车

        以微波炉为例,微波炉内部包含了电源供应系统,微博加热系统,冷却系统,外装防护等.当我们想要使用微波炉加热食物时,只需要使用微波炉上面的面板调整火力和时间,按下启动键后,微波炉的子系统就会立即交互合作将食物加热

        所以,外观模式(Facade)的重点在于,它能将系统内部的互动细节隐藏起来,并提供一个简单方便的接口.之后客户端只需要通过这个接口,就可以操作一个复杂系统并让它们顺利运行

二、外观模式(Facade)的说明

        整合子系统并提供一个高级的界面让客户端使用。

设计模式之外观模式(Facade)_第1张图片

设计模式之外观模式(Facade)_第2张图片

参与者的说明如下:
  client(客户端,用户)

从原本需要操作多个子系统的情况,改为只需要面对一个整合后的界面

  subSystem(子系统)

原本会由不同的客户端(非同一系统相关)来操作,改为只会由内部系统之间交互使用

  Facade(统一对外的界面)

整合所有子系统的接口及功能,并提供高级界面(或接口)供客户端使用

接收客户端的信息后,将信息传送给负责的子系统

三、外观模式(Facade)的实现说明

        从之前提到的一些实例来看,驾驶座位前的方向盘,仪表板,以及微波炉上的面板,都是制造商提供给用户使用的Facade界面。

        外观模式(Facade)可以让客户端使用简单的界面来操作一个复杂的系统,并且减少客户端要与之互动的系统数量,让客户端能够专心处理与本身有关的事情。所以,驾驶员不需要了解汽车引擎系统是否已经调校,只需要注意行车速度以及仪表板上是否有红灯亮起;用户在使用微波炉是,也不用了解此时微波炉的功率是多少瓦,只需要知道放入的容器是否正确、食物是否过熟即可。


总结

        对于一个既庞大又复杂的子系统而言,若应用外观模式(Facade), 即可成为另一个Facade接口.所以,在工作的分工配合上,开发者只需要了解对方负责系统的Facade接口类,不必深入了解其中的运行方式增加系统的安全性

  隔离客户端对子系统的接触,除了能减少耦合度之外,安全性也是重点之一

        将复杂的子系统沟通交给单一的一个类负责,并提供单一界面给客户端使用,使客户减少对系统的耦合度是外观模式(Facade)的优点.

        由于将所有子系统集中在Facade接口类中,最终会导致Facade接口类过于庞大且难以维护,当发生这种情况时,可以重构Facade接口类,将功能相近的子系统进行整合,以减少内部系统的依赖性,或是整合其他设计模式来减少Facade接口类过度膨胀

        由外观模式过于简单,且没有可实现的抽象代码,本文章就对外观模式进行了简单的描述和学习

你可能感兴趣的:(设计模式,1024程序员节,设计模式,外观模式)