设计模式——DAO模式

使用QT,新建QWidget工程。

widget.h如下:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QList>
#include <QDebug>

namespace Ui {
class Widget;
}

class Student {
private:
    QString m_name;
public:
    QString getName();
    void setName(QString name);
};

class StudentDao {
public:
    virtual QList<Student> getAllStudents() = 0;
    virtual ~StudentDao();
};

class StudentDaoImpl : public StudentDao{ // 可以在该类中添加数据库操作
public:
    StudentDaoImpl();
    QList<Student> m_students;
    virtual QList<Student> getAllStudents();
};

class Widget : public QWidget {
    Q_OBJECT
public:
    explicit Widget(QWidget *parent = nullptr);
    ~Widget();
private slots:
    void on_pushButton_clicked();

private:
    Ui::Widget *ui;
    StudentDaoImpl *m_studentDaoImpl;
};

#endif // WIDGET_H

widget.cpp如下:

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) {
    ui->setupUi(this);
    this->m_studentDaoImpl = new StudentDaoImpl();
}

Widget::~Widget() {
    delete this->m_studentDaoImpl;
    delete this->ui;
}

QString Student::getName() {
    return this->m_name;
}

void Student::setName(QString name) {
    this->m_name = name;
}

StudentDao::~StudentDao() { }

StudentDaoImpl::StudentDaoImpl() {
    Student s1,s2;
    s1.setName("John");
    s2.setName("Jim");
    m_students.append(s1);
    m_students.append(s2);
}

QList<Student> StudentDaoImpl::getAllStudents() {
    return this->m_students;
}

void Widget::on_pushButton_clicked() {
    QList<Student> students;
    students = this->m_studentDaoImpl->getAllStudents();
    qDebug()<<students.first().getName();
    qDebug()<<students[1].getName();
}

main.cpp如下:

#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    return a.exec();
}

widget.ui如下:

 运行结果如下:

点击PushButton,会打印学生名字。

说明:DAO模式也叫数据访问对象模式。这里将学生的数据封装成Student类,然后将其访问数据的接口抽象为StudentDao基类,而StudentDaoImpl子类继承StudentDao基类,并重写其接口。在StudentDaoImpl类中可以添加数据库操作,这样在Widget中使用StudentDaoImpl时,只使用其接口,而底层StudentDaoImpl中的数据库操作可以不用关心。使用QList容器,可以用于访问多个Student对象。

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值