C\#에서 의뢰 와 이벤트 가 관찰자 모드 에서 의 응용 실례

일반적으로 감시 대상 의 방법 이 실행 되면 관찰자 Observer 의 방법 을 촉발 시 킬 때 우 리 는 감시 대상 에서 의뢰 와 사건 을 설명 할 수 있다.본 고 는 C\#에서 의뢰 와 사건 이 관찰자 모델 에서 의 응용 을 사례 로 보 여 주 었 다.구체 적 으로 다음 과 같다.
예 는 다음 과 같다.
애완동물 추적 기 가 애완동물 에 게 걸 려 있 는데 애완동물 이 주인 에 게 서 100 미터 떨 어 지면 주인의 손 에 있 는 모니터 에 경고 메시지 가 표시 되 고 소리 가 울 린 다.

   class Program
   {
     static void Main(string[] args)
     {
       PetTracker tracker = new PetTracker();
       tracker.InstanceTrack();
       Console.ReadKey();
     }
   }
  
   public class PetTracker
   {
     private int distance;
  
     //    
     public void InstanceTrack()
     {
       for (int i = 0; i < 102; i++)
       {
         distance = i;
         if (distance > 100)
         {
           MakeAlert(distance);
           ShowAlert(distance);
         }
       }
     }
  
     //               
     private void MakeAlert(int param)
     {
       Console.WriteLine("   ,        " + param + "    ,    ~~");
     }
  
     //                
     private void ShowAlert(int param)
     {
       Console.WriteLine("        " + param + "    ,    ~~");
     }
   }

실행 결 과 는 다음 그림 과 같 습 니 다.

감시 대상 및 관찰자 Observer 정의:
만약 상기 세 가지 방법 을 다른 종류 에 봉 한다 면 그것 은:

   public class PetTracker
   {
     private int distance;
  
     //    
     public void InstanceTrack()
     {
       for (int i = 0; i < 102; i++)
       {
         distance = i;
         if (distance > 100)
         {
  
         }
       }
     }   
   }
  
   public class MakerAlertSupplier
   {
     //               
     public void MakeAlert(int param)
     {
       Console.WriteLine("   ,        " + param + "    ,    ~~");
     }
   }
  
   public class ShowAlertSupplier
   {
     //                
     public static void ShowAlert(int param)
     {
       Console.WriteLine("        " + param + "    ,    ~~");
     }
   }

우리 가 해결 해 야 할 문 제 는:
PetTracker 류 의 InstanceTrack()방법 에서 distance>100 이 되면 MakerAlert Supplier 와 ShowAleart Supplier 에 어떻게 알려 야 합 니까?
위의 세 가지 유형 을 어떻게 보 십 니까?
●PetTracker 는 감시 대상 으로 볼 수 있다.
●MakerAlertSupplier 와 ShowAleartSupplier 는 관찰자,즉 Observer 로 간주한다.
해결 방법:
1.Observer 의 방법 매개 변 수 는 모두 int 형식 임 을 고려 하여,응,다른 방법 명,같은 매개 변수 목록 을 고려 하여,우 리 는 당연히 피 감시 대상 에서 의뢰 를 정의 할 수 있 으 며,observer 방법 과 같은 매개 변수 목록 을 가지 고 있 습 니 다.
2、감시 대상 의 의뢰 가 촉발 되 어 Observer 를 촉발 하 는 방법 은 어떻게 합 니까?이벤트 변 수 를 통 해 Observer 의 방법 을 의뢰 에 연결 하 는 의뢰 형식의 이벤트 가 필요 합 니 다.
3.마지막 으로 감시 대상 이 방법 을 실행 할 때 의뢰 유형의 사건 을 촉발 하여 Observer 방법 을 촉발 합 니 다.
전체 코드 는 다음 과 같 습 니 다:

   class Program
   {
     static void Main(string[] args)
     {
       PetTracker tracker = new PetTracker();
       tracker.TrackEvent += (new MakerAlertSupplier()).MakeAlert;
       tracker.TrackEvent += ShowAlertSupplier.ShowAlert;
  
       tracker.InstanceTrack();
       Console.ReadKey();
     }
   }
  
   public class PetTracker
   {
     private int distance;
  
     public delegate void TrackHandler(int param); //  
     public event TrackHandler TrackEvent; //       
  
     //    
     public void InstanceTrack()
     {
       for (int i = 0; i < 102; i++)
       {
         distance = i;
         if (distance > 100)
         {
           if (TrackEvent != null)
           {
             TrackEvent(distance);
           }
         }
       }
     }   
   }
  
   public class MakerAlertSupplier
   {
     //               
     public void MakeAlert(int param)
     {
       Console.WriteLine("   ,        " + param + "    ,    ~~");
     }
   }
  
   public class ShowAlertSupplier
   {
     //                
     public static void ShowAlert(int param)
     {
       Console.WriteLine("        " + param + "    ,    ~~");
     }
   }

실행 결 과 는 다음 그림 과 같 습 니 다.

총 결 은 다음 과 같다.
●방법 명 에 따라 매개 변수 목록 이 같은 여러 가지 방법 이나 방법 에 대해 그들의 정 의 를 추상 화 했다.
●의뢰 의 집행 과 등록 은 의뢰 유형의 사건 에 맡 겼 다.
●의뢰 는 피 감시 대상 내부 에 국한 되 어 있 으 며,성명 은 Public 이지 만 클 라 이언 트 에 서 는 피 감시 대상 의 의뢰 변 수 를 할당 할 수 없습니다.

좋은 웹페이지 즐겨찾기