外观(Facade)模式
Posted wanlifeipeng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了外观(Facade)模式相关的知识,希望对你有一定的参考价值。
外观模式:为子系统中的一组接口提供一个一致的界面。此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用
在软件开发中,有时候为了完成一项较为复杂的功能,一个客户类需要和多个业务类交互,而这些需要交互的业务类经常会作为一个整体出现,由于涉及到的类比较多,导致使用时代码较为复杂,此时,特别需要一个类似电脑组装公司一样的角色,由它来负责和多个业务类进行交互,而客户类只需与该类交互。外观模式通过引入一个新的外观类(Facade)来实现该功能,外观类充当了软件系统中的“电脑组装公司”,它为多个业务类的调用提供了一个统一的入口,简化了类与类之间的交互。在外观模式中,那些需要交互的业务类被称为子系统(Subsystem)。如果没有外观类,那么每个客户类需要和多个子系统之间进行复杂的交互,系统的耦合度将很大,而引入外观类之后,客户类只需要直接与外观类交互,客户类与子系统之间原有的复杂引用关系由外观类来实现,从而降低了系统的耦合度
在开发阶段,子系统往往因为不断地重构演化而变得越来越复杂,使用外观模式可以提供一个简单的接口,减少它们之间的依赖。 在维护一个大型系统时,可能这个系统已经非常难以维护了和扩展了,我们可以为这个系统增加一个外观Facade类,来提供遗留代码的比较清晰的接口,让新系统与Facade对象交互,Facade则与遗留代码进行交互。
代码:
#include <iostream> using namespace std; class Shopper { public: void shop() { cout << "买菜" << endl; } }; class Cook { public: void cook() { cout << "做饭" << endl; } }; class DishWasher { public: void washDish() { cout << "洗碗" << endl; } }; class Restaurant { public: void makemeal() { _shopper.shop(); _cook.cook(); _dishwasher.washDish(); } private: Shopper _shopper; Cook _cook; DishWasher _dishwasher; }; void test() { Restaurant rs; rs.makemeal(); } int main() { test(); cin.get(); return 0; }
以上是关于外观(Facade)模式的主要内容,如果未能解决你的问题,请参考以下文章