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\#프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.