(43) C \ # 디자인 모델 - 중개자 모델 (Mediator Pattern)

정의.
생활 속 의 예 를 들 어 알 수 있 듯 이 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 방법 을 추가 하면 우 리 는 상태 모델 로 이 문 제 를 해결 할 수 있다 (다음 장 에서 설명).
적용 필드
  • 좋 은 대상 을 정의 하고 지금 복잡 한 상호 통신
  • 을 해 야 한다.
  • 하나의 중간 류 를 통 해 여러 가지 유형의 행 위 를 밀봉 하고 싶 지만 너무 많은 하위 류
  • 를 만 들 고 싶 지 않다.
    장단 점
    장점:
  • 대상 간 의 관 계 를 간소화 하고 시스템 의 각 대상 간 의 상호 관 계 를 밀봉 하여 각 동료 류 를 결합 시 켜 시스템 을 소나무 결합 으로 만 들 었 다.
  • 체계 적 인 유연성 을 제공 하여 각 동료 대상 이 독립 적 이 고 재 활용 하기 쉽다.

  • 단점:
  • 중개 자 모델 에서 중개 자 역할 은 비교적 많은 책임 을 졌 기 때문에 이 중개 자 대상 에 문제 가 생기 면 전체 시스템 은 중대 한 영향 을 받 을 것 이다.예 를 들 어 QQ 게임 에서 즐 거 운 콩 을 계산 하 는 프로그램 이 잘못 되 어 큰 영향 을 미 칠 수 있다.
  • 같은 유형 을 새로 추가 할 때 추상 적 인 중개 자 류 와 구체 적 인 중개 자 류 를 수정 해 야 한다. 이때 관찰자 모델 과 상태 모델 로 이 문 제 를 해결 할 수 있다.

  • 총결산
    중개 자 모델 은 일련의 대상 간 의 상호작용 을 봉인 하기 위해 중개 대상 을 정의 했다.중개 자 는 각 대상 이 명시 적 으로 서로 인용 하지 않 아 도 되 고 결합 성 을 낮 출 수 있 으 며 독립 적 으로 그들의 상호작용 을 바 꿀 수 있다.중개 자 모델 은 일반적으로 좋 은 대상 간 에 통신 을 해 야 하 는 장소 와 여러 가지 유형 에 분포 되 어 있 는 행 위 를 맞 추고 싶 지만 너무 많은 하위 클래스 를 만 들 고 싶 지 않 은 상황 에 응용 된다.

    좋은 웹페이지 즐겨찾기