案例分析:设计模式与代码的结构特性
请选择一种我们课程中介绍的设计模式,用您熟悉的编程语言提供一个典型的应用范例,并分析其代码结构特性。完成一篇研究报告,具体要求如下:
- 引用关键代码(引用代码是为解释说明服务的,不要贴对解释问题无关的代码)解释该设计模式在该应用场景中的适用性;
- 引入该设计模式后对系统架构和代码结构带来了哪些好处;
- 解释其中用到的多态机制;
- 说明模块抽象封装的方法;
- 分析各个模块的内聚度和模块之间的耦合度;
- 提供该应用范例完整的源代码包括构建部署的操作过程,建议以github版本库URL的方式提供源代码,其中README.md中说明构建部署的操作过程。
在课堂上,孟老师介绍了外观模式,孟老师给出的例子是在socket编程中,把那些用到的函数用宏定义重新命名,咋一看会觉得这不是画蛇添足、多此一举吗?实际上不然,因为在Linux系统下和在Windows系统下进行socket编程用到的库函数是不一样的,函数名也有一些不同, 但实现的功能是差不多的,如果对程序进行移植,从两种系统中切换,不使用外观模式,不重新进行宏定义,将会有大量的函数名需要改动,而使用外观模式,只需要对外观类(在socket编程这里是宏定义替代外观类)进行更改即可。在这篇博文中我将对外观模式进行探讨。
这里举个例子,假如我们有三种机器人,可以扫地,唱歌,跳舞,如果我们不设计一个外观类,我们就需要在调用时分别生成三个机器人类,然后调用。
现在我们设计一个机器人管家类,对三种机器人进行管理,我们在调用时就只需要吩咐机器人管家,机器人管家会把命名传达给三种机器人,三种机器人再分别执行自己接受到的命令。
示例代码如下:
#include<iostream> using namespace std; class Robot { //机器人类作为父类 public: virtual void doSomeThing(){} }; //三种不同的机器人类,他们都继承自机器人类 class CleanRobot :public Robot { public: virtual void doSomeThing() { cout << "clean the room" << endl; } }; class MusicRobot :public Robot { public: virtual void doSomeThing() { cout << "play music" << endl; } }; class DanceRobot :public Robot { public: virtual void doSomeThing() { cout << "show a dance" << endl; } }; //机器人管家类,作为外观类 class RobotManager { private: Robot* cleanRobot; Robot* musicRobot; Robot *danceRobot; public: RobotManager() { cleanRobot = new CleanRobot(); musicRobot = new MusicRobot(); danceRobot = new DanceRobot(); } void clean() { cleanRobot->doSomeThing(); } void music() { musicRobot->doSomeThing(); } void dance() { danceRobot->doSomeThing(); } }; //主函数中只要生成一个机器人管家类,向机器人管家类下达指令就可以指挥三种机器人工作了 int main() {
// CleanRobot cleanRobot;
// MusicRobot musicRobot;
// DanceRobot danceRobot;
// cleanRobot.doSomeThing();
// musicRobot.doSomeThing();
// danceRobot.doSomeThing();
RobotManager robotManager = RobotManager(); robotManager.clean(); robotManager.music(); robotManager.dance(); return 0; }

- 意图
- 对子系统的多个接口提供一个对外的统一界面,通过这个界面将大大方便对子系统的调用
- 优点
- 减少了系统的相互依赖
- 提高了系统的灵活程度
- 增强了安全性
- 多态机制
- 在机器人管家类中,包含了三个指向父类类型的指针,但实际上确实指向三个不同的子类,在进行响应的时候,不同的类对消息做出的反应不同,所以这里用到了多态
- 各模块的耦合程度
- 在子系统中模块耦合程度高,模块间的耦合程度低。
GitHub版本库地址:https://github.com/sequelOoO/facadePattern
参考资料:菜鸟教程 https://www.runoob.com/design-pattern/design-pattern-tutorial.html

浙公网安备 33010602011771号