zoukankan      html  css  js  c++  java
  • (11)一步一步开发一个简单CAD之策略模式

    要对模型的操作中,为了实现不现的命令,可以用简单工厂+策略模式,这个也是实现mvc架构的一个重要的设计模式

    具体代码如下

    class CContext//使用策略模式加简单工厂
    {
    public:
     CContext(){m_pCmd = new CComand(), m_pEx = new CExplan(),m_pMove = new CMove();};//实现即时平移
     virtual ~CContext(){ if(m_pCmd) {delete m_pCmd; } if(m_pEx){delete m_pEx;} if(m_pMove) {delete m_pMove;}};
     
     
     
     void TypeCmd(int Num);

     void OnLButtonDown(UINT nFlags,  CPosition pos){m_pCmd->OnLButtonDown(nFlags,  pos);};
        void OnMouseMove(UINT nFlags,  CPosition pos){m_pCmd->OnMouseMove(nFlags,   pos),m_pMove->OnMouseMove(nFlags, pos);};
        void OnRButtonDown(UINT nFlags,  CPosition pos){m_pCmd->OnRButtonDown(nFlags,  pos);};
        void OnLButtonUp(UINT nFlags,  CPosition pos){m_pCmd->OnLButtonUp(nFlags,   pos);};
     void OnMouseWheel(UINT nFlags, short zDelta, CPosition pos){m_pCmd->OnMouseWheel(nFlags, zDelta, pos), m_pEx->OnMouseWheel(nFlags, zDelta, pos);};
        void OnMButtonDown(UINT nFlags, CPosition pos){m_pCmd->OnMButtonDown(nFlags,  pos), m_pMove->OnMButtonDown(nFlags, pos);};
        void OnMButtonUp(UINT nFlags, CPosition pos){m_pCmd->OnMButtonUp(nFlags, pos), m_pMove->OnMButtonUp(nFlags, pos);};
    private:
     CComand *m_pCmd;
     CComand *m_pEx;//实现即时中键缩放
     CComand *m_pMove;//实现即中键平移
    };

    void CContext::TypeCmd(int Num)
    {
      if(m_pCmd)
        {
         delete m_pCmd;
         m_pCmd = NULL;
        }
        switch(Num)
        {
        case ID_DRAW_LINE :
             m_pCmd = new CCreateLine();//改变光标
            break;
        case ID_DRAW_CIRCLE :
        m_pCmd = new CCreateCircle();
        break;
     case ID_DRAW_RECT :
       m_pCmd = new CCreateRect();
       break;
     case ID_EXPLANSMALL :
       m_pCmd = new CExsmall();
             break;
     case ID_EXPLANLarge :
       m_pCmd = new CExlarge();
             break;
     case ID_TRANSLATE :
       m_pCmd = new CBaseMove();//平移命令
             break;
        case ID_PICK :
       m_pCmd = new CSelect();//检选
       break;
        case ID_UNPICK :
       m_pCmd = new CUnSelect();//去掉捡选
       break;
        case ID_DELETE :
       m_pCmd = new CDelete();//删除
       break;
        case ID_ALLDELETE :
       m_pCmd = new CAllDelete();//全删
       break;
        case ID_MIRROR :
       m_pCmd = new CMirror();
       break;
     case ID_ROTATE :
       m_pCmd = new CMirror();
       break;

        default:
            break;
        }
    }

  • 相关阅读:
    Markdown
    DNS解析流程
    maven 的各种命令
    ES6初体验——(1)let和const命令
    table相关的选择器 & children()与find()的区别 & 选择器eq(n)与nth-child(n)的差异
    Java MD5加密类
    POI操作Excel异常Cannot get a text value from a numeric cell
    MyEclipse+SSH开发环境配置
    JdbcTemplate详解
    Spring配置声明
  • 原文地址:https://www.cnblogs.com/lizhengjin/p/1289768.html
Copyright © 2011-2022 走看看