zoukankan      html  css  js  c++  java
  • 外观(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;
    }
  • 相关阅读:
    Ubuntu出现无法定位软件包,更换源
    VScode支持Python
    Tp3.2 组合查询
    PHP 年月日,转为标准时间
    常用查询之按时间范围查询,按名称查询
    微信发起支付步骤
    拷贝 最近 一段时间生成的文件
    获取调查问卷统计
    Tp3.2 实现一个字段的或查询
    MFC DDX_Control 与 DDX_Text
  • 原文地址:https://www.cnblogs.com/hupeng1234/p/6798673.html
Copyright © 2011-2022 走看看