Patterns in SOME - Visitor

 
Code in C#:
 
namespace Visitor_DesignPattern
{
     using System;
 
     abstract class Visitor
     {
         abstract public void VisitElementA(ConcreteElementA a);
         abstract public void VisitElementB(ConcreteElementB b);
     }
 
     class ConcreteVisitor1 : Visitor
     {
         override public void VisitElementA(ConcreteElementA a)
         {
             
         }
 
         override public void VisitElementB(ConcreteElementB b)
         {
             
         }
     }
 
     abstract class Element
     {
         abstract public void Accept(Visitor v);
     }
 
     class ConcreteElementA : Element
     {
         public Visitor myVisitor;
         override public void Accept(Visitor v)
         {
              myVisitor = v;             
         }
 
         public void OperationA()
         {
             
         }
 
         public void DoSomeWork()
         {
              // do some work here
              // . . .
 
              // Get visitor to visit
              myVisitor.VisitElementA(this);      
 
              // do some more work here
              // . . .
         }
     }
 
     class ConcreteElementB : Element
     {
         override public void Accept(Visitor v)
         {
             
         }
 
         public void OperationB()
         {
             
         }
     }
 
     ///<summary>
     ///    Summary description for Client.
     ///</summary>
     public class Client
     {
         public static int Main(string[] args)
         {            
              ConcreteElementA eA = new ConcreteElementA();
              ConcreteElementB eB = new ConcreteElementB();
              ConcreteVisitor1 v1 = new ConcreteVisitor1();
 
              eA.Accept(v1);
              eA.DoSomeWork();
 
              return 0;
         }
     }
}
 
Code in SOME:
   
AVisitor
       a_VisitElementA(CConcreteElementA a)
       a_VisitElementB(CConcreteElementB b)
 
CConcreteVisitor1:AVisitor
       o_VisitElementA(CConcreteElementA a)
       o_VisitElementB(CConcreteElementB b)
 
AElement
       a_Accept(AVisitor v)
 
CConcreteElementA :AElement, ->AVisitor[m_myVisitor]
       o_Accept(AVisitor)       
       OperatorA()
       DoSomeWork()
 
CConcreteElementB: AElement
       o_Accept(AVisitor m_myVisitor)
       OperationB()
 
CClient
       main
 
CClient.main
{
       CConcreteElementA eA.();
       CConcreteElementB eB.();
       CConcreteVisitor1 v1.();
      
       //eA.Accept(v1)
       //{
       // m_myVisitor = v1;
       //};
      
       eA.Accept(m_myVisitor = v1);
       eA.DoSomeWork()
       {
     m_myVisitor.VisitElementA(eA);                  //"m_myVisitor.VisitElementA(this)"
       };
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值