C++之外观(Facade)模式

本文介绍C++中的外观模式,一种用于简化复杂子系统接口的设计模式。通过示例代码展示如何使用外观模式来封装多个子系统的功能,并讨论了该模式的优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0. 简介

外观模式作为我们常用结构模式的最后一节,一些不常用的比如说桥接、享元、代理等,这里等有时间在补充学习吧。下面我将会来继创建模式和结构模式后来讲行为模式。

外观模式是一种结构型设计模式, 能为程序库、 框架或其他复杂类提供一个简单的接口。外观模式(Facade)为子系统中的一组接口提供了一个一致的界面,此模式定义了一个高层接口,这些接口使得这一子系统更加容易使用. 其基本的结构体大致如下:
在这里插入图片描述

1. 外观模式示意图

在这里插入图片描述
Facade类(外观类):对外提供一个高层接口,将客户的请求交给适当子系统进行处理

SubSystem Classees: 是子系统类的集合,每个子系统都完成一个特定的功能,这些子系统可以是某个模块,也可是某些类,Facade类将用户的请求交给这些子系统进行处理;需要注意的是子类中没有Facade类的任何信息,即没有对Facade类对象的引用;

2. 示例程序

外观函数的示例函数很简单,其实就是对多个函数进行封装调用,其形式和生成器的主管 (Director) 类似。可以通过使用简单接口, 但将绝大部分工作委派给其他类的类来识别。 通常情况下, 外观管理其所使用的对象的完整生命周期。

#include<iostream>
using namespace std;

class Sub_Work1//子工作1
{
public:
	void Working1()
	{
		cout<<"Doing Sub-Work1..."<<endl;
	}
};

class Sub_Work2//子工作2
{
public:
	void Working2()
	{
		cout<<"Doing Sub-Work2..."<<endl;
	}
};

class Sub_Work3//子工作3
{
public:
	void Working3()
	{
		cout<<"Doing Sub-Work3..."<<endl;
	}
};

class Sub_Work4//子工作4
{
public:
	void Working4()
	{
		cout<<"Doing Sub-Work4..."<<endl;
	}
};
class Work//总工作,客户与之打交道
{
private:
	Sub_Work1 w1;
	Sub_Work2 w2;
	Sub_Work3 w3;
	Sub_Work4 w4;
public:
	void Work1()//总工作1
	{
		w1.Working1();
		w3.Working3();
	}
	void Work2()//总工作2
	{
		w2.Working2();
		w3.Working3();
		w4.Working4();
	}
};


int main()//client程序
{
	Work w;
	/*******总工作1******/
	cout<<"开始调用总工作1"<<endl;
	w.Work1();

	/*******总工作2******/
	cout<<endl<<"开始调用总工作2"<<endl;
	w.Work2();
	return 0;
}

3. 外观模式的优缺点

在设计初期阶段,应该有意识的将不同的两个层分离或者系统模块化,比如经典的三层架构,就需要在考虑数据访问层和业务逻辑层、业务逻辑层和表示层的层和层之间建立外观Facade,这样可以为复杂的子系统提供一个简单的接口,使得耦合性大大降低.

在开发阶,由于子系统的不断重构演变而变的越来越复杂,客户端程序调用子系统变得困难,此时可以引入外观类可以将子系统与客户端解耦,从而提高子系统的独立性和可移植性。

…详情请参照古月居

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

敢敢のwings

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

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

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

打赏作者

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

抵扣说明:

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

余额充值