C \ # 디자인 모드: 방문 자 모드 (Vistor Pattern)

16292 단어
1. 방문 자 모델 은 특정한 데이터 구조 위 에 가 하 는 조작 을 밀봉 하 는 데 쓰 인 다.이 는 요소 자 체 를 바 꾸 지 않 는 전제 에서 이러한 요소 에 작용 하 는 새로운 조작 을 추가 할 수 있 게 한다. 방문 자 모델 의 목적 은 조작 을 데이터 구조 에서 분리 하 는 것 이다.
코드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. 상기 코드 는 구조 상의 조작 을 완 성 했 고 데이터 의 사용자 정의 방식 의 확장 을 완성 했다.

좋은 웹페이지 즐겨찾기