1、界面与逻辑
基本程序架构一般包括
— 用户界面模块(UI)
— 业务逻辑模块(Logic)用户界面与业务逻辑如何交互?
— 每个模块应该只实现单一的功能
— 模块之间通过约定好的接口进行交互
用户界面使用这个接口,而业务逻辑实现这个接口
基本设计原则
— 模块之间仅通过接口进行关联
— 模块之间的关系是单项依赖的
2、整体架构
此时我们有什么?
1、我们实现了计算器基本的界面
2、我们实现了计算器的基本计算算法
我们还需要做什么?
1、创建接口类(类里面都是纯虚函数)
2、创建封装类(QCalculator
)
ICalculator.h
#ifndef ICALCULATOR_H #define ICALCULATOR_H #include "QString" class ICalculator { public: virtual bool expression(const QString& exp) = 0; virtual QString result() = 0; }; #endif
界面类如何使用接口:
1、定义一个接口类指针对象的成员变量(纯虚类不能直接定义对象):ICalculator* m_cal
2、定义两个相关的成员函数
void setCalculator(ICalculator* cal) { m_cal = cal; } ICalculator* getCalculator() { return m_cal; }
3、实现槽函数最终的等式
else if(btnText == "=") { if(m_cal != nullptr) { m_cal->expression(m_edit->text()); m_edit->setText(m_cal->result); } }
逻辑类如何实现接口:
直接继承即可
class QCalculatorDec : public ICalculator { ... }
3、实现封装类
Calculator.h
#ifndef CALCULATOR_H #define CALCULATOR_H #include "QCalculatorUI.h" #include "QCalculatorDec.h" class Calculator { protected: QCalculatorUI* m_ui; QCalculatorDec m_dec; Calculator(); bool construct(); public: static Calculator* NewInstance(); void show(); ~Calculator(); }; #endif // CALCULATOR_H
Calculator.cpp
#include "Calculator.h" Calculator::Calculator() { } bool Calculator::construct() { m_ui = QCalculatorUI::NewInstance(); if(m_ui != nullptr) { m_ui->setCalculator(&m_dec); //最重要的一步 } return (m_ui != nullptr); } Calculator* Calculator::NewInstance() { Calculator* ret = new Calculator(); if(!(ret && ret->construct())) { delete ret; ret = nullptr; } return ret; } void Calculator::show() { m_ui->show(); } Calculator::~Calculator() { delete m_ui; }
————————————————
版权声明:本文为CSDN博主「静下心来学Qt」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_35379003/article/details/103423485

