(43) C \ # 디자인 모델 - 중개자 모델 (Mediator Pattern)
5033 단어 C \ # 디자인 모드
생활 속 의 예 를 들 어 알 수 있 듯 이 QQ 군 이 든 QQ 게임 이 든 그들 은 모두 중간 플랫폼 역할 을 한다. QQ 사용 자 는 이 중간 플랫폼 에 로그 인하 여 다른 QQ 사용자 와 교류 할 수 있다. 이런 중간 플랫폼 이 없 으 면 우리 가 친구 와 이 야 기 를 나 누고 싶 으 면 얼굴 을 마주 해 야 할 것 이다.전화, 문자 도 마찬가지 입 니 다. 이 중간 플랫폼 이 있 습 니 다.모든 사용 자 는 다른 사용자 에 게 직접 의존 하지 않 고 이 플랫폼 에 만 의존 하면 됩 니 다. 모든 조작 은 중간 플랫폼 에서 배 포 됩 니 다.
중개자 모델 은 일련의 대상 간 의 상호작용 관 계 를 봉인 하기 위해 중개 대상 을 정의 했다.중개 자 는 각 대상 간 에 명시 적 으로 서로 인용 하지 않 고 결합 성 이 낮 아 지 며 그들의 상호작용 행 위 를 독립 적 으로 바 꿀 수 있다.
구조
중개자 모델 디자인 의 두 가지 구체 적 인 대상 중 하 나 는 사용자 유형 이 고 하 나 는 중개자 유형 이다. 인터페이스 프로 그래 밍 원칙 에 따라 이 두 가지 유형 을 추상 화해 야 하기 때문에 중개자 모델 에는 4 가지 역할 이 있다. 추상 적 인 중개자 역할, 구체 적 인 중개자 역할, 이미지 추출 사용자 유형, 구체 적 인 사용자 유형 이다.중개 자 류 는 각 대상 을 조율 하 는 역할 을 하 는데 추상 적 인 중개 자 역할 에서 각 대상 의 인용 을 보존 해 야 한다.
왜 중개자 모드 를 사용 합 니까?
현실 생활 에서 중개자 의 존 재 는 반드시 없어 서 는 안 된다. 만약 중개자 가 없다 면 우 리 는 먼 곳 의 친구 와 교 류 를 할 수 없다.소프트웨어 디자인 분야 에서 중개 자 모델 을 사용 하지 않 으 면 각 대상 은 서로 인용 되 고 모든 대상 이 여러 대상 과 상호작용 을 할 때 그물 모양 구 조 를 나타 낸다.
중개 자 모델 을 인용 하면 대상 간 의 관 계 는 별 구조 로 바뀐다.성형 구 조 는 그물 모양 구조 에 비해 한 대상 의 변화 가 대상 자체 와 중개자 의 변 화 를 일 으 킬 뿐 다른 대상 에 영향 을 주지 않 는 다 는 장점 이 있다.이런 디자인 은 시스템 의 결합 도 를 크게 감소 시 켰 다.
이루어지다
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _34MediatorPatternDemo
{
//
public abstract class AbstractCardPatner
{
public int MoneyCount { get; set; }
public AbstractCardPatner()
{
MoneyCount = 0;
}
public abstract void ChangeCount(int Count, AbstractMediator mediator);
}
//
public class ParterA : AbstractCardPatner
{
//
public override void ChangeCount(int Count, AbstractMediator mediator)
{
mediator.AWin(Count);
}
}
public class ParterB : AbstractCardPatner
{
//
public override void ChangeCount(int Count, AbstractMediator mediator)
{
mediator.BWin(Count);
}
}
//
public abstract class AbstractMediator
{
protected AbstractCardPatner A;
protected AbstractCardPatner B;
public AbstractMediator(AbstractCardPatner a, AbstractCardPatner b)
{
A = a;
B = b;
}
public abstract void AWin(int count);
public abstract void BWin(int count);
}
//
public class MediatorPater : AbstractMediator
{
public MediatorPater(AbstractCardPatner a, AbstractCardPatner b) : base(a, b)
{
}
public override void AWin(int count)
{
A.MoneyCount += count;
B.MoneyCount -= count;
}
public override void BWin(int count)
{
A.MoneyCount -= count;
B.MoneyCount += count;
}
}
//
class Program
{
static void Main(string[] args)
{
AbstractCardPatner A = new ParterA();
AbstractCardPatner B = new ParterB();
//
A.MoneyCount = 20;
B.MoneyCount = 30;
AbstractMediator mediator = new MediatorPater(A, B);
//A
A.ChangeCount(5, mediator);
Console.WriteLine("A :{0}", A.MoneyCount);// 25
Console.WriteLine("B :{0}", B.MoneyCount); // 25
// ,B
B.ChangeCount(10, mediator);
Console.WriteLine("A :{0}", A.MoneyCount);// 15
Console.WriteLine("B :{0}", B.MoneyCount); // 35
}
}
}
위의 실현 코드 에서 추상 적 인 중개 자 류 는 두 개의 추상 적 인 패 우 류 를 저장 했다. 만약 에 패 우 류 를 새로 추가 하면 이 추상 적 인 중개 자 류 를 바 꿀 수 밖 에 없다.관찰자 모델 과 결합 하여 이 문 제 를 해결 할 수 있다. 즉, 추상 적 인 중개 대상 이 추상 적 인 패 친구 의 유형 을 저장 한 다음 에 Register 와 UnRegister 방법 을 추가 하여 이 목록 을 관리 한 다음 에 구체 적 인 중개 자 류 에서 AWin 과 BWin 방법 을 수정 하여 목록 을 옮 겨 다 니 며 자신 과 다른 패 친구 의 돈 수 를 바 꿀 수 있다.이러한 디자인 에 또 하나의 문제 가 존재 한다. 즉, 새로운 브랜드 친 구 를 추가 할 때 추상 적 인 중개 자 류 가 수정 할 필요 가 없 는 문 제 를 해결 하지만 이 때 는 구체 적 인 중개 자 류 를 수정 해 야 한다. 즉, CWin 방법 을 추가 하면 우 리 는 상태 모델 로 이 문 제 를 해결 할 수 있다 (다음 장 에서 설명).
적용 필드
장단 점
장점:
단점:
총결산
중개 자 모델 은 일련의 대상 간 의 상호작용 을 봉인 하기 위해 중개 대상 을 정의 했다.중개 자 는 각 대상 이 명시 적 으로 서로 인용 하지 않 아 도 되 고 결합 성 을 낮 출 수 있 으 며 독립 적 으로 그들의 상호작용 을 바 꿀 수 있다.중개 자 모델 은 일반적으로 좋 은 대상 간 에 통신 을 해 야 하 는 장소 와 여러 가지 유형 에 분포 되 어 있 는 행 위 를 맞 추고 싶 지만 너무 많은 하위 클래스 를 만 들 고 싶 지 않 은 상황 에 응용 된다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모드 시리즈 - 상태 모드아침 8 시 반 에 일어나 머리 를 빗 고 집 을 나 와 천안문 으로 갔 는데 천안문 에 도착 하 니 이렇게 추 운 날 에 사람 이 왜 이렇게 많 지?다 들 나 처럼 뜨 거 운 마음 을 가지 고 있 구나.오문 에 들...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.