C \ # 디자인 모드: 방문 자 모드 (Vistor Pattern)
코드
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _21.
{
///
/// 1 Visitor Pattern
/// 2
/// 3 —— , Introduce ,
/// 4 GetBehavior
/// 5 GetBehaviorVisitor
///
class Program
{
///
/// 。 , 。
///
///
static void Main(string[] args)
{
try
{
Console.WriteLine(" Visitor");
List peopleList = new List()
{
new USA()
{
Id=638,
Name="ttt"
},
new Chinese()
{
Id=123,
Name="ccc"
}
};
///
foreach (var people in peopleList)
{
Console.WriteLine("*************************");
people.Introduce();
people.GetBehavior();
}
{
///
VisitorSayBehavior visitor = new VisitorSayBehavior();
foreach (var people in peopleList)
{
Console.WriteLine("*************************");
people.Introduce();
people.GetBehaviorVisitor(visitor);
}
}
{
///
VisitorEatBehavior visitor = new VisitorEatBehavior();
foreach (var people in peopleList)
{
Console.WriteLine("*************************");
people.Introduce();
people.GetBehaviorVisitor(visitor);
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.Read();
}
}
///
///
///
public interface IVisitor
{
void GetBehaviorChinese(Chinese peopleChinese);
void GetBehaviorUSA(USA peopleUsa);
}
///
///
/// :
///
public class VisitorSayBehavior : IVisitor
{
public void GetBehaviorChinese(Chinese peopleChinese)
{
Console.WriteLine(" , !!!");
}
public void GetBehaviorUSA(USA peopleUsa)
{
Console.WriteLine(" , !!!");
}
}
///
///
/// :
///
public class VisitorEatBehavior : IVisitor
{
public void GetBehaviorChinese(Chinese peopleChinese)
{
Console.WriteLine(" , !!!");
}
public void GetBehaviorUSA(USA peopleUsa)
{
Console.WriteLine(" , !!!");
}
}
///
///
///
public abstract class People
{
public int Id { get; set; }
public string Name { get; set; }
public void Introduce()
{
Console.WriteLine(" {0}!!", this.Name);
}
public abstract void GetBehavior();
public abstract void GetBehaviorVisitor(IVisitor visitor);
}
public class Chinese : People
{
///
///
///
public override void GetBehavior()
{
//// if else
//if()
//{}
//else if()
//{}
//else{}
Console.WriteLine(" , ");
}
//
//
public override void GetBehaviorVisitor(IVisitor visitor)
{
visitor.GetBehaviorChinese(this);//this
}
}
public class USA : People
{
public string CourseFree { get; set; }
public string CourseVip { get; set; }
public override void GetBehavior()
{
//if()
//{}
//else if()
//{}
//else{}
Console.WriteLine(" , ");
}
public override void GetBehaviorVisitor(IVisitor visitor)
{
visitor.GetBehaviorUSA(this);//this
}
}
}
3. 상기 코드 는 구조 상의 조작 을 완 성 했 고 데이터 의 사용자 정의 방식 의 확장 을 완성 했다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.