技术支持 骏域网站建设专家佛山,农村建设自己的网站,wordpress添加微信分享功能,wordpress的标题字体从C编程入手设计模式——外观模式
前言
笔者最近疲惫于期末考试#xff0c;这里挤一点牙膏更新一下设计模式的内容。
外观模式
同志们都接触过庞大的史山代码#xff0c;都知道修改史山是我们经常遇到的需求之一。不过好在#xff0c;大部分复杂系统想要跑通…从C编程入手设计模式——外观模式
前言
笔者最近疲惫于期末考试这里挤一点牙膏更新一下设计模式的内容。
外观模式
同志们都接触过庞大的史山代码都知道修改史山是我们经常遇到的需求之一。不过好在大部分复杂系统想要跑通基本的架构分层还是要有的。这也就意味着我们对于新的需求可以重新组装下层的模块相互之间新的协调可以组成一个新的良好的工作的系统我们是不需要重新专门为新需求大幅度的重写代码这是笔者认为外观模式一个重要的功能。
另一方面外观模式中一个比较重要的一点或者说更加现实中的是,对于复杂的子系统我们只知道子系统可以确保的完成给定的子任务我们希望将这些功能组合起来的时候就直接将子系统进行有机的组合或者说限制客户程序员按照随意的方式调度子系统的工作或者说按照规范的方式对子系统进行操作
#include iostreamclass SubsystemA {
public:void operationA() {std::println(Subsystem A operation\n);}
};class SubsystemB {
public:void operationB() {std::println(Subsystem B operation\n);}
};class Facade {
public:void operation() {a.operationA();b.operationB();}private:SubsystemA a;SubsystemB b;
}; 如你所见假设我们的AB子系统存在先后调度的顺序要求的时候我们就是用这个办法来进行封装此时此刻我们就可以把SubsystemA和SubsystemB藏到私有文件中不可见我们只公开Facade类这样我们就能将复杂的子系统协作给覆盖掉取而代之简单的接口。
这个模式在实际开发中非常常见特别是在需要与多个模块交互的时候比如启动一个操作系统、打开一个媒体播放器、处理一个网络请求等。凡是存在目标调用顺序或者特定的私有协作方式的时候就需要使用这个办法来屏蔽具体的实现细节。
举个例子家庭影院
想象你有一个智能家庭影院系统里面包含了以下几个设备
灯光控制器DVD 播放器音响系统投影仪
如果你想要看一场电影你可能要做很多步骤先关灯再打开投影仪接着打开音响和 DVD 机。这些操作本身很简单但流程琐碎。
如果我们为这些设备写一个“统一的控制器”只需要调用一个 watchMovie() 方法就能自动完成这些流程是不是更方便了
这就是外观模式的用武之地。这个内容留作练习。笔者已经放到Github上了 Charliechen114514/modern-cpp-patterns-playground: A modern C20 practice repository showcasing classic design patterns such as Singleton, Factory, and more 外观模式的适用场景
这个模式非常适合用在以下几种情况
子系统非常复杂调用方只需要常用的一些功能。我们希望对子系统进行分层把系统的使用者和内部实现解耦。我们希望在不修改子系统代码的情况下简化它的使用方式。
就是这样的