C\#디자인 모델 의 Visitor 방문 자 모델 해결 장 륭 환락 세계 문제 실례

본 고 는 C\#디자인 모델 의 Visitor 방문 자 모델 이 장 륭 환락 세계 문 제 를 해결 하 는 것 을 사례 로 서술 했다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
이론 적 정의
방문 자 모드 는 집합 대상 의 통 일 된 방문 인 터 페 이 스 를 제공 하여 집합 중의 대상 에 대해 논리 적 인 조작 을 하여 데이터 구 조 를 만 드 는 데 적합 하 다.  논리 구조 와 분리 하 다.
2.예 를 들 어
수요 설명:여름 방학 이 왔 습 니 다!세 젊은이 가 뭉 쳐 차 를 몰 고 장 륭 환락 의 세 계 를 놀 러 왔 다.
사람마다 하고 싶 은 종목 이 다 르 고,
여행자   10 라운드 롤러 코스 터,토 네 이도,드 림 스 핀
여행자   공중 경찰,즐 거 운 마 천륜,슈퍼 워 터 워 터
여행자   놀 고 싶다:4 차원 영화관,수직 한계,U 형 스 케 이 트 보드
차 가 장 륭 에 도착 하면 각자 Enjoy 를 시작 합 니 다!!!
3.구체 적 인 코딩
1.여행자 인터페이스 하나,플레이 방법 하나

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Com.Design.Gof.Visitor
{
  public interface ITourist
  {
    /// <summary>
    ///   
    /// </summary>
    /// <param name="happyWorld">      </param>
     void Play(ChangLongHappyWorld happyWorld);
  }
}

2.모든 사람 이 어떤 종목 을 하려 고 하 는 지 표지 가 있다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Com.Design.Gof.Visitor
{
  [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)]
  public class PlayAttribute : Attribute
  {
    private string _PlayItem;
    /// <summary>
    ///      
    /// </summary>
    public string PlayItem
    {
      get { return _PlayItem; }
      set { _PlayItem = value; }
    }
  }
}

3.장 륭 환락 의 세계

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
namespace Com.Design.Gof.Visitor
{
  /// <summary>
  ///       
  /// </summary>
  public class ChangLongHappyWorld
  {
    /// <summary>
    ///        
    /// </summary>
    /// <param name="visitor"></param>
    public void visit(ITourist visitor) {
      //             。    ,    
      MethodInfo[] method = visitor.GetType().GetMethods();
      foreach (MethodInfo m in method) {
        object[] property= m.GetCustomAttributes(false);
        string customerAttribute = null;
        if (property.Length>0) {
          customerAttribute = property[0].ToString();
        }
        if (customerAttribute == "Com.Design.Gof.Visitor.PlayAttribute")
        {
          m.Invoke(visitor, new object[] { });
        }
      }
    }
  }
}

4.여행자  1

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Com.Design.Gof.Visitor
{
  /// <summary>
  ///     1    :     ,    ,    
  /// </summary>
  public class TouristOne : ITourist
  {
    /// <summary>
    ///      
    /// </summary>
    [PlayAttribute(PlayItem = "TenthRingRollerCoaster")]
    public void Play_TenthRingRollerCoaster() {
      Console.WriteLine("    1,      :     ");
    }
    /// <summary>
    ///     
    /// </summary>
     [PlayAttribute(PlayItem = "TornadoStorm")]
    public void Play_TornadoStorm()
    {
      Console.WriteLine("    1,      :    ");
    }
    /// <summary>
    ///     
    /// </summary>
    [PlayAttribute(PlayItem = "DreamHorse")]
    public void Play_DreamHorse()
    {
      Console.WriteLine("    1,      :    ");
    }
    public void Play(ChangLongHappyWorld happyWorld)
    {
      happyWorld.visit(this);
    }
  }
}

5.여행자 2

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Com.Design.Gof.Visitor
{
  /// <summary>
  ///     2    :    ,     ,    
  /// </summary>
  public class TouristTwo : ITourist
  {
    /// <summary>
    ///     
    /// </summary>
    [PlayAttribute(PlayItem = "AirPolice")]
    public void Play_AirPolice() {
      Console.WriteLine("    2,      :    ");
    }
    /// <summary>
    ///      
    /// </summary>
    [PlayAttribute(PlayItem = "FerrisWheel")]
    public void Play_FerrisWheel()
    {
      Console.WriteLine("    2,      :     ");
    }
    /// <summary>
    ///     
    /// </summary>
    [PlayAttribute(PlayItem = "SuperWater")]
    public void Play_SuperWater()
    {
      Console.WriteLine("    2,      :    ");
    }
    public void Play(ChangLongHappyWorld happyWorld)
    {
      happyWorld.visit(this);
    }
  }
}

6.여행자 3

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Com.Design.Gof.Visitor
{
  /// <summary>
  ///     3    :    ,    ,U   
  /// </summary>
  public class TouristThree : ITourist
  {
    /// <summary>
    ///     
    /// </summary>
    [PlayAttribute(PlayItem = "AirPolice")]
    public void Play_Cinema4D() {
      Console.WriteLine("    3,      :    ");
    }
    /// <summary>
    ///     
    /// </summary>
    [PlayAttribute(PlayItem = "VerticalLimit")]
    public void Play_VerticalLimit()
    {
      Console.WriteLine("    3,      :    ");
    }
    /// <summary>
    /// U   
    /// </summary>
    [PlayAttribute(PlayItem = "UShapeSkateboard")]
    public void Play_UShapeSkateboard()
    {
      Console.WriteLine("    3,      :U   ");
    }
    public void Play(ChangLongHappyWorld happyWorld)
    {
      happyWorld.visit(this);
    }
  }
}

7.주 함수

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Com.Design.Gof.Visitor;
namespace Com.Design.Gof.Test
{
  class Program
  {
    static void Main(string[] args)
    {
      //     ,            ,             。
      List<ITourist> list = new List<ITourist> {
       new TouristOne(),
       new TouristTwo(),
       new TouristThree()
      };
      //          ,    
      ChangLongHappyWorld happyWorld = new ChangLongHappyWorld();
      //         !!
      foreach (var visit in list) {
        visit.Play(happyWorld);
        Console.WriteLine("------------------------------------------------");
      }
      Console.ReadKey();
    }
  }
}

8.실행 결과

9.총화
C\#의 반 사 를 활용 하여 복잡 한 방문 자 모델 을 실현 합 니 다.
첨부:전체 인 스 턴 스 코드 는 여 기 를 클릭 하 십시오본 사이트 다운로드
더 많은 C\#관련 내용 은 본 사이트 의 주 제 를 볼 수 있다.,,,,,,
본 고 에서 말 한 것 이 여러분 의 C\#프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기