設計模式之——解釋器模式

abstractExpression.h

#ifndef ABSTRACTEXPRESSION_H
#define ABSTRACTEXPRESSION_H

#include <QtDebug>
#include "context.h"

class AbstractExpression
{
public:
    AbstractExpression() {}
    virtual void interpret(Context context){}
};

class TerminalExpression : public AbstractExpression
{
public:
    TerminalExpression() {}
    void interpret(Context context)
    {
        qDebug() << "終端解釋器";
    }
};

class NonterminalExpression : public AbstractExpression
{
public:
    NonterminalExpression() {}
    void interpret(Context context)
    {
        qDebug() << "非終端解釋器";
    }
};

#endif // ABSTRACTEXPRESSION_H

context.h

#ifndef CONTEXT_H
#define CONTEXT_H

#include <QString>

class Context
{
public:
    Context() {}
private:
    QString m_input;
    QString m_output;
};

#endif // CONTEXT_H

main.cpp

#include <QApplication>

#include <QList>
#include "context.h"
#include "abstractExpression.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    Context context;
    QList<AbstractExpression*> list;
    AbstractExpression *t = new TerminalExpression();
    AbstractExpression *n = new NonterminalExpression();
    list.append(t);
    list.append(n);

    foreach (AbstractExpression *p, list) {
        p->interpret(context);
    }

    return a.exec();
}

UML
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章