不得不说的结构型模式-外观模式

目录

​编辑

1. 什么是外观模式

1.1外观模式的结构:

2实际案例:

3下面是面试中关于装饰器模式的常见的问题:

3.1下面是问题的答案:


1. 什么是外观模式

Facade模式也叫外观模式, Facade模式为一组具有类似功能的类群,比如类库,子系统等等,提供一个一致的简单的界面。这个一致的简单的界面被称作facade。其实也就是提供一个统一的接口,来访问子系统中一群功能相关接口。外观模式定义了一个高层接口,让子系统更容易使用。

外观模式通过定义一个高层接口,来统一封装一系列底层子系统的接口,从而降低了系统的复杂性,并提高了系统的可维护性和可扩展性。

在C++中,外观模式通常由一个Facade类来实现。这个类包含了一系列高层接口,用于封装子系统中的底层接口。客户端可以通过Facade类来使用这些高层接口,而无需了解底层子系统的实现细节。在实现外观模式时,我们通常还需要定义一些底层子系统的类,这些类提供了具体的实现细节。在Facade类中,我们会将这些底层子系统的对象组合起来,并对外提供高层接口。

外观模式的实际应用场景非常广泛,比如说,我们可以使用外观模式来简化复杂的API,隐藏一些不必要的接口,提供更加友好的界面;还可以使用外观模式来封装底层子系统的实现细节,从而实现系统的解耦和高内聚;另外,外观模式还可以用来简化多个类之间的交互,从而减少系统中的复杂度。

1.1外观模式的结构:

 

  • Facade:为调用方定义简单的调用接口。

  • Clients: 调用者。通过Facade接口调用提供某功能的内部类群。

  • Packages :功能提供者。指提供功能的类群(模块或子系统)

2实际案例:

下面是一个简单的外观模式示例,假设我们有一个子系统包含了两个类:类A和类B,它们分别提供了接口a()和接口b()。客户端想要使用这两个接口,但是不想了解它们的实现细节,这时候可以使用外观模式来简化客户端代码:

#include <iostream>

// 定义类A,提供接口a()
class A {
public:
    void a() {
        std::cout << "A::a()" << std::endl;
    }
};

// 定义类B,提供接口b()
class B {
public:
    void b() {
        std::cout << "B::b()" << std::endl;
    }
};

// 定义外观类Facade,封装类A和类B的接口
class Facade {
public:
    Facade() {
        // 在构造函数中创建类A和类B的对象
        m_A = new A();
        m_B = new B();
    }

    ~Facade() {
        // 在析构函数中释放类A和类B的对象
        delete m_A;
        delete m_B;
    }

    // 提供高层接口,调用类A和类B的接口
    void highLevelApi() {
        m_A->a();
        m_B->b();
    }

private:
    A* m_A;
    B* m_B;
};

int main() {
    // 客户端使用外观类
    Facade facade;
    facade.highLevelApi();
    return 0;
}

在这个示例中,类A和类B提供了各自的接口,而外观类Facade封装了它们的接口。在客户端中,只需要创建一个外观类的对象,然后调用外观类的高层接口即可。客户端不需要了解类A和类B的实现细节,也不需要关心它们之间的交互方式,因为这些细节都被封装在Facade类中。

3下面是面试中关于装饰器模式的常见的问题:

  1. 什么是外观模式?
  2. 外观模式的主要目的是什么?
  3. 外观模式与其他模式的区别是什么?
  4. 外观模式的优缺点是什么?
  5. 你能否举一个实际应用场景来说明外观模式的使用?

可以尝试自己思考一下,你的看法是什么,然后再看看答案,对比一下,看看有什么遗漏的地方=v=.

3.1下面是问题的答案:

  1. 外观模式是一种结构型设计模式,它通过为子系统中的一组接口提供一个统一的接口,来简化客户端与子系统之间的交互。外观模式将客户端与复杂的子系统分离开来,使得客户端不必了解子系统的内部实现细节。
  2. 外观模式的主要目的是简化复杂系统的接口,减少客户端与子系统之间的耦合。外观模式通过为子系统提供一个统一的接口,使得客户端可以更容易地使用子系统,同时也使得子系统更容易被维护和扩展。
  3. 外观模式与其他模式的区别在于它关注的是接口的简化和统一,而不是对象的创建和组合。外观模式通常涉及到的类只有一个,即外观类,而其他模式可能会涉及到多个类和对象。
  4. 外观模式的优点包括:
    • 简化客户端与子系统之间的交互,降低了客户端代码的复杂度和耦合度。
    • 提高了系统的可维护性和可扩展性,因为外观类作为一个中介层,可以隔离子系统的变化对客户端的影响。
    • 提高了系统的安全性,因为客户端无法直接访问子系统的内部接口,从而减少了潜在的安全风险。 外观模式的缺点包括:
    • 如果子系统的接口发生了变化,外观类也需要进行相应的修改。
    • 外观类的引入会增加系统中的一个间接层,有可能会影响到系统的性能和扩展性。
  5. 一个实际应用场景是在操作系统中,为了方便用户使用,通常会提供一组系统调用接口。这些接口涉及到许多复杂的操作,如文件系统操作、网络连接操作、进程管理等。为了简化用户的操作,操作系统通常会对这些接口进行封装,提供一个统一的接口,供用户使用。

欢迎大家讨论留言,批评指正,共同学习,共同进步!

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五百五。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值