>  기사  >  Java  >  자바 디자인 패턴 중재자 패턴

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

高洛峰
高洛峰원래의
2017-03-18 11:56:531335검색

중재자 패턴

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

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