인 스 턴 스 설명 방문 자 모드 (Visitor Pattern)

여섯 캐릭터:
        추상 적 인 방문 자 (Visitor), 구체 적 인 방문 자 (ConcreteVisitor), 추상 적 인 요소 (Element), 구체 적 인 요소 (ConcreteElement), 대상 구조 류 (Object Structure), 클 라 이언 트 (Client) 
        추상 방문 자 (Visitor): 방문 요소 의 동작 을 추상 화 합 니 다.
        구체 적 인 방문 자 (ConcreteVisitor): 방문 요 소 를 실현 하 는 동작
        추상 요소 (Element): 방문 을 받 는 동작 을 정의 합 니 다. 그 매개 변 수 는 방문 자 입 니 다.
        구체 적 인 요소 (ConcreteElement): 접근 작업 을 수행 합 니 다.
        대상 구조 류 (Object Structure): 요 소 를 매 거 할 수 있 고 요 소 를 관리 할 수 있 습 니 다.
        클 라 이언 트 (클 라 이언 트) :요소 집합 을 정의 하고 서로 다른 방문 자의 방문 을 받 습 니 다.
실현 방향:
        대상 구조 류 에 요 소 를 추가 한 다음 에 다양한 방문 자 를 정의 하고 대상 구조 류 를 이용 하여 방문 자 를 받 아들 이면 된다.
아 날로 그:
 
응용 필드:
        사용자 가 블 로 그 를 방문 하 다
분석:
       사용 자 는 컴퓨터 의 웹 방식 (방문 자) 이나 모 바 일 Wap 방식 (방문 자) 을 통 해 블 로 그 를 방문 할 수 있다. 모든 블 로 그 는 하나의 요소 이 고 블 로그 목록 은 하나의 대상 구조 류 이다.
        다음은 콘 솔 프로그램 에서 Visitor Pattern 을 어떻게 사용 하 는 지 보 여 드 리 겠 습 니 다.
        1. 추상 적 인 방문 자 (Visitor):
    //     (Visitor)
    abstract class Visitor
    {
        public abstract void VisitBlog(Element element);
    }

       2. 구체 적 인 방문 자 (ConcreteVisitor):
    //     (ConcreteVisitor)
    class WebVisitor : Visitor
    {
        public override void VisitBlog(Element element)
        {
            Console.WriteLine("    web      Blog:" + element.BlogName);
        }
    }
    //     (ConcreteVisitor)
    class WapVisitor : Visitor
    {
        public override void VisitBlog(Element element)
        {
            Console.WriteLine("    wap      Blog:" + element.BlogName);

        }  
    }
        3. 추상 요소 (Element):
    //    (Element)
    abstract class Element
    {
        public string BlogName { get; set; }
        abstract public void Accept(Visitor visotr);
    }
 
         四、具体元素(ConcreteElement): 
  
 
    //    (ConcreteElement)
    class BlogElement : Element
    {
        public BlogElement(string blogname)
        {
            this.BlogName = blogname;
        }
        public override void Accept(Visitor visitor)
        {
            visitor.VisitBlog(this);
        }
    }
        5. 대상 구조 류 (ObjectStructure):
    //     (ObjectStructure)
    class Blogs
    {
        private IList<Element> blogList = new List<Element>();

        public void AddBlog(Element element)
        {
            blogList.Add(element);
        }

        public void RemoveBlog(Element element)
        {
            blogList.Remove(element);
        }
        public void Accept(Visitor visitor)
        {
            foreach (Element e in blogList)
                e.Accept(visitor);
        }
    }
        6. 클 라 이언 트 (클 라 이언 트) :
    //   (Client)
    class Program
    {
        static void Main(string[] args)
        {
            Blogs blogs = new Blogs();
            blogs.AddBlog(new BlogElement("       "));
            blogs.AddBlog(new BlogElement("       "));
            blogs.AddBlog(new BlogElement("       "));
            blogs.AddBlog(new BlogElement("       "));

            Visitor webVisit = new WebVisitor();
            Visitor wapVisit = new WapVisitor();

            blogs.Accept(webVisit);
            blogs.Accept(wapVisit);
            Console.ReadLine();
        }
    }

좋은 웹페이지 즐겨찾기