zoukankan      html  css  js  c++  java
  • 行为型模型 解释模型

    行为型模型 解释模型

    /**
     * 行为型模型 解释模型
     * 给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。
     *
     */
    
    #define _CRT_SECURE_NO_WARNINGS
    
    #include <iostream>
    #include <string>
    
    class Context
    {
    public:
        Context(int num)
        {
            m_num = num;
        }
        void setNum(int num)
        {
            m_num = num;
        }
        int getNum()
        {
            return m_num;
        }
        void setRes(int res)
        {
            m_res = res;
        }
        int getRes()
        {
            return m_res;
        }
    
    private:
        int m_num;
        int m_res;
    };
    
    class Expression
    {
    public:
        virtual void interpreter(Context * contex) = 0;
        virtual ~Expression() {}
    };
    
    class PlusExpression: public Expression
    {
        virtual void interpreter(Context * contex) override
        {
            int num = contex->getNum();
            num++;
            contex->setNum(num);
            contex->setRes(num);
        }
    };
    
    class MinusExpression: public Expression
    {
    public:
        virtual void interpreter(Context * contex) override
        {
            int num = contex->getNum();
            num--;
            contex->setNum(num);
            contex->setRes(num);
        }
    };
    
    
    void mytest()
    {
        Context *pcxt = new Context(10);
        Expression *e1 = new PlusExpression();
        e1->interpreter(pcxt);
        std::cout << "PlusExpression: " << pcxt->getRes() << std::endl;
        Expression *e2 = new MinusExpression();
        e2->interpreter(pcxt);
        std::cout << "MinusExpression: " << pcxt->getRes() << std::endl;
    
        delete e2;
        e2 = nullptr;
        delete e1;
        e1 = nullptr;
        delete pcxt;
        pcxt = nullptr;
    
        return;
    }
    
    int main()
    {
        mytest();
    
        system("pause");
        return 0;
    }
  • 相关阅读:
    贫血,充血模型的解释以及一些经验(非常经典)(非原创)
    源代码管理安装大全
    20条常见的编码陷阱 你中枪了没?(转)
    从30岁到35岁:为你的生命多积累一些厚度(转)
    Model1 与Model2(转)
    白话MVP(转帖)
    stl string 使用
    TerminateThread不要使用的證據
    C++静态成员函数小结(转)
    C/C++必知必会1
  • 原文地址:https://www.cnblogs.com/lsgxeva/p/7783778.html
Copyright © 2011-2022 走看看