• 设计模式:外观模式(C++实现)


    外观模式(Facade Pattern)是一种结构设计模式,它提供了一个统一的接口,用于访问子系统中的一组接口。外观模式隐藏了子系统的复杂性,使得客户端只需要与外观对象交互,而不需要直接与子系统中的对象进行交互。
    以下是一个简单的C++外观模式的示例:

    #include 
    
    // 子系统类A
    class SubsystemA
    {
    public:
        void operationA()
        {
            std::cout << "Subsystem A operation" << std::endl;
        }
    };
    
    // 子系统类B
    class SubsystemB
    {
    public:
        void operationB()
        {
            std::cout << "Subsystem B operation" << std::endl;
        }
    };
    
    // 外观类
    class Facade
    {
    private:
        SubsystemA *subsystemA;
        SubsystemB *subsystemB;
    
    public:
        Facade()
        {
            subsystemA = new SubsystemA();
            subsystemB = new SubsystemB();
        }
        ~Facade()
        {
            delete subsystemA;
            delete subsystemB;
            subsystemA = nullptr;
            subsystemB = nullptr;
        }
        void operation()
        {
            subsystemA->operationA();
            subsystemB->operationB();
        }
    };
    
    int main()
    {
        Facade facade;
        facade.operation();
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55

    运行结果:

    Subsystem A operation
    Subsystem B operation
    
    • 1
    • 2

    在上述示例中,SubsystemA和SubsystemB是子系统类,分别实现了子系统的一些操作。Facade是外观类,它持有子系统类的对象,并提供了一个统一的接口operation()用于访问子系统的操作。
    在main()函数中,创建了一个外观类facade对象。通过调用外观类的operation()方法,实现了访问子系统类的操作。客户端只需要与外观对象交互,而不需要直接与子系统类进行交互。
    通过外观模式,可以简化客户端与子系统之间的交互,提供了一个统一的接口,隐藏了子系统的复杂性。外观模式可以提高代码的可维护性和可读性,同时也可以降低客户端与子系统之间的耦合度。

  • 相关阅读:
    给 hugo 博客添加搜索功能
    1080 Graduate Admission
    进程,线程,协程
    【Day22】解决线程安全问题以及JDK1.5新增
    【Android Framework系列】第15章 Fragment+ViewPager与Viewpager2相关原理
    C++提高编程:01 模板
    【Mysql】第8篇--数据库元数据
    SGI STL 二级空间配置源码刨析
    Selenium自动化测试之Selenium IDE
    MacBook 往服务器上传、下载文件的几种操作
  • 原文地址:https://blog.csdn.net/wydxry/article/details/133064396