Java java지도 시간 자바 디자인 패턴 중재자 패턴

자바 디자인 패턴 중재자 패턴

Mar 18, 2017 am 11:56 AM

중재자 패턴

객체 지향 설계는 다양한 객체 간의 동작 분포를 장려합니다. 이 분포는 최악의 경우 각 객체 간에 많은 연결을 초래할 수 있습니다.

시스템을 여러 객체로 나누면 재사용성이 높아지지만, 객체 간의 상호 연결이 늘어나면 재사용성이 많이 떨어집니다. 다른 개체의 지원(시스템은 분할할 수 없는 전체로 나타남) 현재 시스템 동작을 크게 변경하는 것은 매우 어렵습니다. 동작이 여러 개체에 분산되어 있기 때문에 결과적으로 많은 하위 클래스가 필요하게 됩니다. 따라서 우리는 중재자 객체 Mediator를 도입했습니다:

자바 디자인 패턴 중재자 패턴

중개자 객체를 통해 네트워크 구조는 다음과 같습니다. 시스템은 스타로 변형됩니다. 매개자를 중심으로 하는 구조. 각각의 특정 객체는 더 이상 다른 객체와 직접적인 관계를 갖지 않고 매개 객체를 통해 매개됩니다. 또한 매개 객체의 도입으로 인해 시스템 구조가 영향을 받지 않게 됩니다. 새로운 객체로 인해 많은 수정이 발생했습니다.

매개자 패턴: 중재자 패턴이라고도 알려진 중재자 객체(Mediator)는 일련의 객체의 상호 작용을 캡슐화하여 각 객체가 통신할 수 있도록 하는 데 사용됩니다. 참조를 표시하지 않고도 서로 참조하여 결합을 느슨하게 하고 상호 작용을 독립적으로 변경할 수 있습니다.

자바 디자인 패턴 중재자 패턴

(이미지 출처: Design Patterns: The Foundation of 재사용 가능한 객체 지향 소프트웨어) 팁: 각 동료는 중재자의 존재만 알고 있으며, 다른 동료가 존재하는지 여부(그렇지 않은 경우 이를 분리하는 방법)는 알 필요가 없습니다. 중재자는 이를 다른 동료에게 전달합니다(중재자는 모든 동료 관계를 저장하며 중재자만이 동료 수/동료가 몇 명인지 알고 있습니다).

모드 구현

UN은 다양한 국가의 성명을 전달합니다. 그리고 국가 간 관계를 중재합니다:
국가는 유엔 안전보장이사회에 메시지를 보내고 받습니다. 유엔 안전보장이사회는 국가 간의 협력적 행동을 적절하게 이행하기 위한 전달 요청을 중재합니다:

자바 디자인 패턴 중재자 패턴

동료

추상 동료 클래스, 각 동료의 공개 메소드 정의:

/**
 * @author jifang
 * @since 16/8/28 下午4:22.
 */
public abstract class Country {
 
 protected UnitedNations mediator;
 
 private String name;
 
 public Country(UnitedNations mediator, String name) {
  this.mediator = mediator;
  this.name = name;
 }
 
 public String getName() {
  return name;
 }
 
 protected abstract void declare(String msg);
 
 protected abstract void receive(String msg);
}
로그인 후 복사

------------ ------------ ------------ ---------

ConcreteColleague

구체적인 동료 클래스:
•각 동료 클래스는 중재자 개체를 알고 있습니다.
•각 동료 개체는 다음과 같은 경우 중재자와 통신합니다. 다른 동료들과 소통해야 해요.

아아아

------ --------------- --------- ----------

Mediator

추상 중재자: 각 동료 객체와 통신하기 위한 인터페이스 정의:

class USA extends Country {
 
 public USA(UnitedNations mediator, String name) {
  super(mediator, name);
 }
 
 @Override
 public void declare(String msg) {
  mediator.declare(this, msg);
 }
 
 @Override
 public void receive(String msg) {
  System.out.println("美国接收到: [" + msg + "]");
 }
}
 
class Iraq extends Country {
 
 public Iraq(UnitedNations mediator, String name) {
  super(mediator, name);
 }
 
 @Override
 public void declare(String msg) {
  mediator.declare(this, msg);
 }
 
 @Override
 public void receive(String msg) {
  System.out.println("伊拉克接收到: [" + msg + "]");
 }
}
 
class China extends Country {
 
 public China(UnitedNations mediator, String name) {
  super(mediator, name);
 }
 
 @Override
 public void declare(String msg) {
  mediator.declare(this, msg);
 }
 
 @Override
 public void receive(String msg) {
  System.out.println("中国接收到: [" + msg + "]");
 }
}
로그인 후 복사

---------------------- -------------------------- ----------- -------------

ConcreteMediator

특정 중개자:
•다양한 동료를 이해하고 유지합니다.
•각각의 조정을 통해 협력적 행동을 달성합니다. 동료 객체(동료로부터 메시지 수신, 특정 동료에게 명령 실행)

public abstract class UnitedNations {
 
 protected List<Country> countries = new LinkedList<>();
 
 public void register(Country country) {
  countries.add(country);
 }
 
 public void remove(Country country) {
  countries.remove(country);
 }
 
 protected abstract void declare(Country country, String msg);
}
로그인 후 복사

확장이 없으면 Mediator를 ConcreteMediator와 결합할 수 있습니다.
•클라이언트

class UnitedNationsSecurityCouncil extends UnitedNations {
 
 /**
  * 安理会在中间作出调停
  *
  * @param country
  * @param msg
  */
 @Override
 protected void declare(Country country, String msg) {
  for (Country toCountry : countries) {
   if (!toCountry.equals(country)) {
    String name = country.getName();
    toCountry.receive(name + "平和的说: " + msg);
   }
  }
 }
}
로그인 후 복사

- --------- --------------- --------- -------

요약

Mediator의 출현으로 두 요소 간의 결합이 감소합니다. 동료, 객체가 협력하는 방식에 따라 각 동료와 중재자를 독립적으로 변경하고 재사용할 수 있음 추상화를 제거하고 중개자를 독립적인 개념으로 취급하고 객체에 캡슐화함으로써 관심의 초점이 객체 자체의 동작에서 객체로 이동합니다. 보다 거시적인 관점에서 볼 수 있도록 합니다.

•적용성
중개자 패턴은 시스템에 적용하기 쉽고 오용도 쉽습니다. 시스템에 "다대다" 상호작용이 있는 복잡한 개체 그룹이 있는 경우 중재자를 사용할 때는 서두르지 말고 시스템 설계가 합리적인지 먼저 생각해 보는 것이 가장 좋습니다. . ConcreteMediator는 중앙 집중화를 제어하므로 중재자를 중재자의 복잡성으로 전환하여 중재자를 다른 중재자보다 더 복잡하게 만듭니다. ConcreteColleagues는 다음과 같은 상황에서 권장됩니다. 명확하게 정의되어 있지만 복잡한 방식으로 통신합니다. 결과적인 상호의존성은 복잡하고 이해하기 어렵습니다.
◦ 하나의 객체가 다른 객체를 참조하며 이러한 객체와 직접 통신하므로 객체를 재사용하기가 어렵습니다.
◦ 여러 클래스에 분산되는 동작을 사용자 정의하고 싶지만 너무 많은 하위 클래스를 생성하고 싶지 않습니다.

•관련 패턴
◦ Facade와 mediator의 차이점은 객체 하위 시스템을 추상화하여 보다 편리한 인터페이스를 제공한다는 것입니다. 프로토콜은 단방향, 즉 Facade 객체입니다. 이 하위 시스템 클래스에 요청합니다. 그러나 그 반대는 아닙니다. Mediator는 각 Colleague 객체가 지원하지 않거나 지원할 수 없는 협업 동작을 제공하며 프로토콜은 다방향입니다.
◦ Colleague는 Mediator와 통신할 수 있습니다. 🎜>

위 내용은 이 글의 전체 내용입니다. 모든 분들의 학습에 도움이 되길 바랍니다.

자바 디자인 패턴의 중개 패턴과 관련된 더 많은 글은 PHP 중국어 홈페이지를 주목해주세요!

관련 기사:

Java에서 Mediator 패턴을 구현하는 코드에 대한 자세한 소개

책임 사슬에 대한 소개 Java 디자인 패턴 패턴

Java 디자인 패턴 프록시 모드 소개(프록시 모드)

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Java의 클래스로드 메커니즘은 다른 클래스 로더 및 대표 모델을 포함하여 어떻게 작동합니까? Java의 클래스로드 메커니즘은 다른 클래스 로더 및 대표 모델을 포함하여 어떻게 작동합니까? Mar 17, 2025 pm 05:35 PM

Java의 클래스 로딩에는 부트 스트랩, 확장 및 응용 프로그램 클래스 로더가있는 계층 적 시스템을 사용하여 클래스로드, 링크 및 초기화 클래스가 포함됩니다. 학부모 위임 모델은 핵심 클래스가 먼저로드되어 사용자 정의 클래스 LOA에 영향을 미치도록합니다.

카페인 또는 구아바 캐시와 같은 라이브러리를 사용하여 자바 애플리케이션에서 다단계 캐싱을 구현하려면 어떻게해야합니까? 카페인 또는 구아바 캐시와 같은 라이브러리를 사용하여 자바 애플리케이션에서 다단계 캐싱을 구현하려면 어떻게해야합니까? Mar 17, 2025 pm 05:44 PM

이 기사는 카페인 및 구아바 캐시를 사용하여 자바에서 다단계 캐싱을 구현하여 응용 프로그램 성능을 향상시키는 것에 대해 설명합니다. 구성 및 퇴거 정책 관리 Best Pra와 함께 설정, 통합 및 성능 이점을 다룹니다.

캐싱 및 게으른 하중과 같은 고급 기능을 사용하여 객체 관계 매핑에 JPA (Java Persistence API)를 어떻게 사용하려면 어떻게해야합니까? 캐싱 및 게으른 하중과 같은 고급 기능을 사용하여 객체 관계 매핑에 JPA (Java Persistence API)를 어떻게 사용하려면 어떻게해야합니까? Mar 17, 2025 pm 05:43 PM

이 기사는 캐싱 및 게으른 하중과 같은 고급 기능을 사용하여 객체 관계 매핑에 JPA를 사용하는 것에 대해 설명합니다. 잠재적 인 함정을 강조하면서 성능을 최적화하기위한 설정, 엔티티 매핑 및 모범 사례를 다룹니다. [159 문자]

고급 Java 프로젝트 관리, 구축 자동화 및 종속성 해상도에 Maven 또는 Gradle을 어떻게 사용합니까? 고급 Java 프로젝트 관리, 구축 자동화 및 종속성 해상도에 Maven 또는 Gradle을 어떻게 사용합니까? Mar 17, 2025 pm 05:46 PM

이 기사에서는 Java 프로젝트 관리, 구축 자동화 및 종속성 해상도에 Maven 및 Gradle을 사용하여 접근 방식과 최적화 전략을 비교합니다.

적절한 버전 및 종속성 관리로 Custom Java 라이브러리 (JAR Files)를 작성하고 사용하려면 어떻게해야합니까? 적절한 버전 및 종속성 관리로 Custom Java 라이브러리 (JAR Files)를 작성하고 사용하려면 어떻게해야합니까? Mar 17, 2025 pm 05:45 PM

이 기사에서는 Maven 및 Gradle과 같은 도구를 사용하여 적절한 버전 및 종속성 관리로 사용자 정의 Java 라이브러리 (JAR Files)를 작성하고 사용하는 것에 대해 설명합니다.

See all articles