C++设计模式-采用装饰模式用户和管理员加载不同的模块(Qt框架实现)
发布日期:2021-06-30 11:01:44 浏览次数:2 分类:技术文章

本文共 1519 字,大约阅读时间需要 5 分钟。

目录

 

 


 

基本概念

这里在本例子的基本上,进行扩充与修改。

同样,结构图如下

 

例子与实例

当加载如下信息时:

界面如下:

修改成如下:

界面运行如下:

程序结构如下:

这里只是简单处理,所有的模块都是formxxxxxxxxx.ui和相关类组成的,按道理来说,应该是写到一个dll里面,调用不同的dll,进行加载,这样的话,耦合性就低了,而且还方便后期的维护工作。

这里的concretedcoratorX.h和.cpp是decorator的子类,decorator是透明的,写好了就不用改。通过concretedcoratorX在operation的地方写对应模块的代码,在通过如下的代码,进行加载即可

详细代码,请到下面这个链接里面查找。

component为最关键的接口。他有着承上启下的作用,关联了comcretecomponent这个具体对象,和decorator与装饰相关的(这里我给他称之为与装饰相关的中间层)。

感觉主要就是套路!

component.h

#ifndef COMPONENT_H#define COMPONENT_H#include 
QT_BEGIN_NAMESPACEclass QWidget;QT_END_NAMESPACEclass Component{public: virtual void processOperation(QWidget *page = nullptr);protected: Component();};#endif // COMPONENT_H

component.cpp

#include "component.h"void Component::processOperation(QWidget *page){    Q_UNUSED(page)}Component::Component(){}

decorator.h

#ifndef DECORATOR_H#define DECORATOR_H#include "component.h"class Decorator: public Component{public:    Decorator();    void setComponent(Component *component);    void processOperation(QWidget *page = nullptr);private:    Component *m_component;};#endif // DECORATOR_H

decorator.cpp

 

#include "decorator.h"#include 
#include
Decorator::Decorator(){ m_component = nullptr;}void Decorator::setComponent(Component *component){ m_component = component; processOperation();}void Decorator::processOperation(QWidget *page){ if(page == nullptr) return; qDebug() << "Decorator processOperation called!" << m_component; m_component->processOperation(page);}

源码打包下载地址如下:

转载地址:https://it1995.blog.csdn.net/article/details/91410751 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Spring Boot笔记-echarts的使用及数据的修改
下一篇:C++设计模式-装饰模式

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年04月23日 03时46分39秒