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#includeQT_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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2024年04月23日 03时46分39秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
UVA-11401 Triangle Counting(数学优化)
2019-04-30
UVA 11806 Cheerleaders(容斥原理)(组合数)
2019-04-30
Codeforces Round #369 (Div. 2)
2019-04-30
UVA 11426 GCD - Extreme (II)(欧拉函数)
2019-04-30
HDU-2838 Cow Sorting(树状数组)
2019-04-30
POJ-2299 Ultra-QuickSort(树状数组)(离散化)
2019-04-30
POJ-1655 Balancing Act(树的重心)
2019-04-30
POJ-3140 Contestants Division(树dp)
2019-04-30
2017 ACM-ICPC 亚洲区(西安赛区)网络赛 C. Sum
2019-04-30
HDU-6214 Smallest Minimum Cut(最大流)
2019-04-30
Windows安装Scrapy库
2019-04-30
HDU-2586 How far away ?(LCA)
2019-04-30
hihocoder #1069 : 最近公共祖先·三(ST求LCA)
2019-04-30
hackerrank Lucky Numbers(扩展gcd/规律)
2019-04-30
HDU 5115 Dire Wolf(区间dp)
2019-04-30