首页 > 其他 > 详细

案例分析:设计模式与代码的结构特性

时间:2019-12-07 10:57:13      阅读:111      评论:0      收藏:0      [点我收藏+]

请选择一种我们课程中介绍的设计模式,用您熟悉的编程语言提供一个典型的应用范例,并分析其代码结构特性。完成一篇研究报告,具体要求如下:

  •  引用关键代码(引用代码是为解释说明服务的,不要贴对解释问题无关的代码)解释该设计模式在该应用场景中的适用性;
  •  引入该设计模式后对系统架构和代码结构带来了哪些好处;
  •  解释其中用到的多态机制;
  •  说明模块抽象封装的方法;
  •  分析各个模块的内聚度和模块之间的耦合度;
  •  提供该应用范例完整的源代码包括构建部署的操作过程,建议以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;
}

 

技术分享图片

 

 

 

  1. 意图
    • 对子系统的多个接口提供一个对外的统一界面,通过这个界面将大大方便对子系统的调用
  2. 优点
    • 减少了系统的相互依赖
    • 提高了系统的灵活程度
    • 增强了安全性
  3. 多态机制
    • 在机器人管家类中,包含了三个指向父类类型的指针,但实际上确实指向三个不同的子类,在进行响应的时候,不同的类对消息做出的反应不同,所以这里用到了多态
  4. 各模块的耦合程度
    • 在子系统中模块耦合程度高,模块间的耦合程度低。

GitHub版本库地址:https://github.com/sequelOoO/facadePattern  

 

 

参考资料:菜鸟教程 https://www.runoob.com/design-pattern/design-pattern-tutorial.html

 

 

 

 

 

 

 

 

 

 

 

 

 

案例分析:设计模式与代码的结构特性

原文:https://www.cnblogs.com/xujih/p/11992007.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!