C++ 学习笔记(24)Facade Pattern

本文深入讲解外观模式,一种用于简化复杂子系统交互的设计模式。通过实例对比,展示如何使用外观模式实现逻辑与实现的分离,简化代码并提高系统的可维护性。

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

Facade Pattern 

外观模式

生活中的例子:(1)通过总开关,接入和切断电源(2)网站导航

主要思想:定义一个外观类(外覆器),为子系统的一组接口提供统一的接口。在这些子系统和使用子系统的客户之间建立一层“缓冲层”,这个缓冲层接收客户的访问请求,然后将任务分配到诸子系统中。

外观模式之前:

class Com_1 { public: void run(); } ;

class Com_2 { public: void run(); } ;

class Com_3 { public: void run(); } ;

class Com_4 { public: void run(); } ;

class System {
private:
	std::shared_ptr<Com_1> ptr_1;
	std::shared_ptr<Com_2> ptr_2;
	std::shared_ptr<Com_3> ptr_3;
	std::shared_ptr<Com_4> ptr_4;
public:
	void run() {

		// 逻辑判断, 合法性检验, 前期准备工作

		ptr_1->run();
		ptr_2->run();
		ptr_3->run();
		ptr_4->run();

		// 后期清理工作等
	}
} ;

如果有多次集体的 run 行动,每次都需要书写一遍 run, 如果子系统数量增多,将变得复杂。

而且,逻辑和实现耦合在一起。

使用外观模式之后:

class Com_1 { public: void run(); } ;

class Com_2 { public: void run(); } ;

class Com_3 { public: void run(); } ;

class Com_4 { public: void run(); } ;

class Facade {
private:
	std::shared_ptr<Com_1> ptr_1;
	std::shared_ptr<Com_2> ptr_2;
	std::shared_ptr<Com_3> ptr_3;
	std::shared_ptr<Com_4> ptr_4;
public:
	void run() {
		assert(ptr_1 and ptr_2 and ptr_3 and ptr_4);
		ptr_1->run();
		ptr_2->run();
		ptr_3->run();
		ptr_4->run();
	}
} ;

class System {
private:
	std::shared_ptr<Facade> ptr;
public:
	void run() {

		// 前期准备工作, 逻辑判断等

		ptr->run();

		// 后期清理工作
	}
} ;

优点:(1)做到逻辑和实现分离(2)简化了书写难度,每次集体 run(包括其他操作),都可以用 外观类 Facade 的一次操作完成,适合多个子系统的情况。(3)如果子系统发生更改,只会影响到外观类,而不会影响到 System 系统类。

缺点:(1)增加了一层间接访问性(2)空间上有一个 std::shared_ptr (或者其他引用的损失)。

和适配器模式的区别:(1)适配器模式是为了调用不兼容的的接口,针对单个类;外观模式针对的是多个子系统,提供一个统一访问的接口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值