관찰자 모드 [C \ #]
정의.
대상 간 의 다 중 의존 관 계 를 정의 합 니 다. 대상 의 상태 가 바 뀌 었 을 때 모든 의존 대상 이 알림 을 받 고 자동 으로 업 데 이 트 됩 니 다.
한 마디 로 하면 관찰자 모델 은 피 관찰자 의 특정한 동작 이 실 행 될 때 해당 하 는 관찰자 에 게 알려 줄 수 있다.관찰자 들 로 하여 금 즉시 상응하는 반응 을 할 수 있 게 하 다.
구조 도
예시 항목 약술
예시 코드 의 대략적인 의 도 는 사실 다운로드 기 를 실현 하 는 것 이다.지정 한 파일 다운로드 가 완료 되면 관찰자 들 에 게 각자 의 수요 에 따라 다운로드 한 파일 을 처리 할 수 있 도록 알려 준다.
다음은 구체 적 인 코드 를 보십시오.
코드
추상 관찰자
///
///
///
interface IObserver
{
void DoUpdate();
}
사실 이 추상 적 인 관찰 자 는 단지 간단 한 인터페이스 일 뿐이다.모든 구체 적 인 관찰자 들 은 그것 을 계승 할 것 이다.
구체 적 관찰자
///
/// - , 。
///
class Observer1 : IObserver
{
public void DoUpdate()
{
Console.WriteLine(" 1 。");
}
}
///
/// - , 。
///
class Observer2 : IObserver
{
public void DoUpdate()
{
Console.WriteLine(" 2 。");
}
}
///
/// - , 。
///
class Observer3 : IObserver
{
public void DoUpdate()
{
Console.WriteLine(" 3 。");
}
}
이상 은 세 명의 간단 한 구체 적 인 관찰자 이다.그들 은 각각
의 통 지 를 받 은 후에 파일 을 백업 하고 압축 하 며 전송 한다.관찰자 들 이 준 비 를 마 쳤 으 니 피 관찰자 차례 다.
피 관찰자
일반적으로 피 관찰 자 는 상대 적 으로 복잡 하 다.어떤 동작 을 수행 하 는 방법 뿐만 아니 라 등록 및 로그아웃 관찰자 의 방법 도 제공 해 야 하기 때문이다.피 관찰자 가 생 성 된 후에 먼저 필요 한 관찰 자 를 연결 해 야 합 니 다 (필요 하 다 면).관찰자 들 이 귀속 에 성공 하면 이 관찰자 목록 은 관찰자 에 의 해 유지 된다.피 관찰자 의 어떤 동작 이 실 행 된 후에 관찰자 에 게 알려 야 한다 면 이 관찰자 목록 을 통 해 알려 야 할 모든 관찰자 에 게 차례대로 알려 줄 수 있다.
///
/// -
///
class Downloader
{
///
///
///
public readonly HashSet observers;
public Downloader()
{
observers = new HashSet();
}
///
///
///
public bool AddObserver(IObserver _observer)
{
return observers.Add(_observer);
}
///
///
///
public bool RemoveObserver(IObserver _observer)
{
return observers.Remove(_observer);
}
///
///
///
public void Download()
{
Console.WriteLine(" 。");
Console.WriteLine(" ···");
Thread.Sleep(3000);//
Console.WriteLine(" 。");
foreach (var observer in observers)
{
observer.DoUpdate();
}
}
}
위의 코드 에서
Download
방법 에서 파일 다운로드 가 성공 하면 관찰자 목록 을 옮 겨 다 니 며 해당 하 는 관찰자 에 게 하나씩 알려 준다. ,
클 라 이언 트클 라 이언 트 코드 보 세 요.
//
var downloader = new Downloader();
//
var o1 = new Observer1();
var o2 = new Observer2();
var o3 = new Observer3();
//
downloader.AddObserver(o1);
downloader.AddObserver(o2);
downloader.AddObserver(o3);
//
downloader.Download();
피 관찰자 대상 을 만 들 고 세 명의 관찰 자 를 등록 합 니 다.등록 에 성공 하면 파일 을 다운로드 하 는 동작 을 수행 할 수 있 습 니 다.파일 다운로드 가 완료 되면
Download
방법 내부 에서 성공 적 으로 등 록 된 관찰자 들 에 게 알 립 니 다.실행 결과
보다 시 피
의 통 지 를 보 낸 후에 각 관찰자 들 은 각자 의 작은 동작 을 시작 했다. 각각 백업, 압축, 퍼 가기 이다.총결산
관찰자 들 자체 에 공공 적 인 추상 적 인 관찰자 가 있 기 때문에 특정한 관찰자 가 변동 이 필요 할 때 이 관찰 자 를 버 리 고 다른 새로운 관찰 자 를 만 들 수 있 으 며 기 존의 어떠한 관찰 도 바 꾸 지 않 아 도 된다.따라서 이런 측면 에서 볼 때 관찰자 모델 은 개폐 원칙 에 부합된다.이상 은 미니 멀리 즘 관찰자 모델 의 모든 내용 입 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Java 관찰자 모드 쉽게 파악정의: 객체 간에 일대다 관계가 있을 때 관찰자 모드(Observer Pattern)를 사용합니다.예를 들어 대상이 수정되면 의존 대상을 자동으로 알려준다. 특징: 1. 관찰자와 피관찰자는 추상적인 결합이다. 2. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.