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_HCalculator.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


少有人走的路



















