zoukankan      html  css  js  c++  java
  • Visitor模式和Observer观察者模式

    所谓访问者模式,就是不同服务提供者对同一种服务提供的服务内容不同。

    Typedef   std::vector<Ivisitable>   VisitbleArray;    

    Typedef  std::vector<IVisitor>  VisitorArray;

    Interface  IVisitable

    {

          void      AcceptSum(IVisitor  visitor);     

    void      AcceptAvg(IVisitor  visitor);

          void     CalcSum( IVisitor  visitor) ;

    void    CalcAvg(IVisitor  visitor);

    void    Attach(  Ivisitor  v);

    void    Detach ( Ivisitor  v);      

    }                                                                

    Typedef   std::vector<Ivisitable>   VisitbleArray;    

    Interface IVisitor

    {

    void         GetSum ( IVisitable  v);                       

    void         GetAvg(IVisitable  v);

    void  VisitSumCollection(VisitbleArray collection);      

    void  VisitAvgCollection(VisitbleArray collection);       

    }       

    Class   CVisitor1: public   IVisitor

    {

    void         GetSum ( IVisitable  v)

    {                    

    Printf(“ vistor1 invoke: ”);

         v. AcceptSum (this);

    }                    

    void      GetAvg(IVisitable  v)

    {       

    Printf(“ vistor1 invoke: ”);

       v.AcceptAvg(this);

    }

    //在本方法中,我们实现了对Collection的元素的成功访问
      void   VisitSumCollection(VisitbleArray collection) {
         VisitbleArray::Iterator it = collection.begin();
          while (it  != collection.end())

    {
             it->AcceptSum(this);

    It++;
          }

    }

    void   VisitAvgCollection(VisitbleArray collection) {
         VisitbleArray::Iterator it = collection.begin();
          while (it  != collection.end())

    {
             it->AcceptAvg(this);

    It++;
          }

    }                

    Class   CVisitor2: public   IVisitor

    {

    void         GetSum ( IVisitable  v)

    {                    

    Printf(“ vistor2 invoke: ”);

         v. AcceptSum (this);

    }                    

    void      GetAvg(IVisitable  v)

    {       

    Printf(“ vistor2 invoke: ”);

       v.AcceptAvg(this);

    }

    //在本方法中,我们实现了对Collection的元素的成功访问
      void   VisitSumCollection(VisitbleArray collection) {
         VisitbleArray::Iterator it = collection.begin();
          while (it  != collection.end())

    {
             it->AcceptSum(this);

    It++;
          }

    }

    void   VisitAvgCollection(VisitbleArray collection) {
         VisitbleArray::Iterator it = collection.begin();
          while (it  != collection.end())

    {
             it->AcceptAvg(this);

    It++;
          }

    }                

    Class    CProduct1 :  public   IVisitable

    {

                void      AcceptSum(IVisitor  visitor)

    {

    visitor-> GetSum(this);

    }

         void      AcceptAvg(IVisitor  visitor)

    {

    Visitor->GetAvg(this);

    }

           void     CalcSum( IVisitor  visitor)

    {

         Float  sum =0.0;

    for(std::vector<float>::iterator  it = m_Vec.begin(); m_vec.end();it++)

    Sum += *it;

    Printf(“ product1 calc  sum is =%f ”,sum);

    }     

           void     CalcAvg( IVisitor  visitor)

    {

         Float  sum =0.0,avg=0.0;

    for(std::vector<float>::iterator  it = m_Vec.begin(); m_vec.end();it++)

    Sum += *it;

    avg=sum/ m_Vec.size();

    Printf(“ product1 calc  avg  is =%f ”,avg);

    }

    private:

        std::vector<float>  m_Vec;

    }

    Class    CProduct2 :  public   IVisitable

    {

           void      AcceptSum(IVisitor  visitor)

    {

    visitor-> GetSum(this);

    }

         void      AcceptAvg(IVisitor  visitor)

    {

    Visitor->GetAvg(this);

    }

           void     CalcSum( IVisitor  visitor)

    {

         Float  sum =0.0;

    for(std::vector<float>::iterator  it = m_Vec.begin(); m_vec.end();it++)

    Sum += *it;

    Printf(“ product2 calc  sum is =%f ”,sum);

    }     

           void     CalcAvg( IVisitor  visitor)

    {

         Float  sum =0.0,avg=0.0;

    for(std::vector<float>::iterator  it = m_Vec.begin(); m_vec.end();it++)

    Sum += *it;

    avg=sum/ m_Vec.size();

    Printf(“ product2 calc  avg  is =%f ”,avg);

    }

    private:    

        std::vector<float>  m_Vec;

    }

    所谓观察者式,就是不同种观察者希望提供一种服务。

  • 相关阅读:
    ‘Host’ is not allowed to connect to this mysql server
    centos7安装mysql
    further configuration avilable 不见了
    Dynamic Web Module 3.0 requires Java 1.6 or newer
    hadoop启动 datanode的live node为0
    ssh远程访问失败 Centos7
    Linux 下的各种环境安装
    Centos7 安装 python2.7
    安装scala
    Centos7 安装 jdk 1.8
  • 原文地址:https://www.cnblogs.com/skyofbitbit/p/4231692.html
Copyright © 2011-2022 走看看