중재자 모드 : (17)에 설명 된 자바 디자인 패턴

이 문서 출처 : GitHub의이 · 여기를 클릭 || GitEE이 · 여기를 클릭하십시오

살아있는 장면

1, 장면 설명

일반적으로 부서의 번호로 나눈 회사의 하루 일정에서 각 부서는 서로 다른 그룹으로 분류되며, 핵심 작업, 제품 팀, 팀은 개발 팀의 요구로 부서의 팀장과의 작업을 조정하는 것입니다 배치 및 조정을 통합 관리자에 통합 요약.

(2) 도시 장면

3, 코드 구현

public class C01_InScene {
    public static void main(String[] args) {
        Manager manager = new Manager() ;
        EmployeeA employeeA = new EmployeeA("张三",manager) ;
        EmployeeB employeeB = new EmployeeB("李四",manager) ;
        employeeA.sendMsg(employeeA.name,"需要产品文档",employeeB);
    }
}
/**
 * 部门协调接口
 */
interface Department {
    void coordinate (String userName,String msg,Employee employee) ;
}
/**
 * 部门经理
 */
class Manager implements Department {
    @Override
    public void coordinate (String userName,String msg,Employee employee) {
        System.out.println("经理接收【"+userName+"】的协调任务:" + msg);
        System.out.println("经理转发【"+userName+"】协调任务,@【"+employee.name+"】");
        employee.getMsg(userName,msg);
    }
}
/**
 * 员工抽象类
 */
abstract class Employee {
    public String name ;
    private Department department ;
    public Employee (String name,Department department){
        this.name = name ;
        this.department = department ;
    }
    public void getMsg (String userName,String msg){
        System.out.println("【"+this.name+"】收到"+"【"+userName+"】协调任务:["+msg+"]");
    }
    public void sendMsg (String name,String msg,Employee employee){
        System.out.println("【"+name+"】发起协调任务:"+ msg);
        department.coordinate(name,msg,employee);
    }
}
/**
 * 具体员工
 */
class EmployeeA extends Employee {
    public EmployeeA(String name, Department department) {
        super(name, department);
    }
}
class EmployeeB extends Employee {
    public EmployeeB(String name, Department department) {
        super(name, department);
    }
}

결과

【张三】发起协调任务:需要产品文档
经理接收【张三】的协调任务:需要产品文档
经理转发【张三】协调任务,@【李四】
【李四】收到【张三】协调任务:[需要产品文档]

둘째, 중재자 모델

1, 기본 개념

중재자 패턴은 객체의 행동의 패턴이다. 객체가 명시 적 참조를하지 않아도 서로 같은과 상호 작용하는 물체의 방법 중재자 패턴 세트를 포장, 참조 된 개체는 중간, 객체 사이의 이러한 디커플링을 통해 통지됩니다. 이들 중 일부 개체 사이의 상호 작용이 변화를 객체하면, 즉시 다른 객체 사이의 상호 작용에 영향을 미치지 않습니다. 이러한 상호 작용은 서로 독립적으로 변화 될 수 있는지 확인합니다.

2 패턴을 도시

3, 핵심 역할

  • 추상 중재자 역할

동료들은 하나 개 이상의 이벤트 방식의 주요 방법이다 인터페이스 매개체 오브젝트를 정의하는 오브젝트.

  • 특정 중재자 역할

추상적 인 중재자를 달성하기 위해 이벤트 방법은 선언했다. 특정 중재자는 특정 클래스 동료, 교환 모든 정보를 보유하고 있으며 다양한 특정 동료 객체를 좌표입니다.

  • 추상 동료 역할

동료 매개체 객체에 대한 인터페이스를 정의한다. 동료의 객체는 중재자가 특정 동료 개체를 모르는 보유하고 있습니다.

  • 동료의 역할 별

모든 클래스는 추상 클래스에서 특정 동료 동료 상속, 당신이 통신 중재자 개최 할 때 다른 동료들과 의사 소통을 할 필요가 중재자는 다른 개체 동료와의 상호 작용에 대한 책임이 있습니다.

4, 소스 코드 구현

/**
 * 抽象调停者类
 */
interface Mediator {
    void notify (Colleague colleague);
}
/**
 * 抽象同事类
 */
abstract class Colleague {
    /* 持有调停者对象 */
    private Mediator mediator;
    public Colleague(Mediator mediator){
        this.mediator = mediator;
    }
    public Mediator getMediator(){
        return mediator;
    }
}
/**
 * 具体调停者类
 */
class ConcreteMediator implements Mediator{
    private ConcreteColleagueA colleagueA ;
    private ConcreteColleagueB colleagueB ;
    public void setColleagueA(ConcreteColleagueA colleagueA) {
        this.colleagueA = colleagueA;
    }
    public void setColleagueB(ConcreteColleagueB colleagueB) {
        this.colleagueB = colleagueB;
    }
    @Override
    public void notify(Colleague colleague) {
        System.out.println("协调通知消息");
    }
}
/**
 * 具体同事类
 */
class ConcreteColleagueA extends Colleague{
    public ConcreteColleagueA(Mediator mediator) {
        super(mediator);
    }
    public void operate(){
        getMediator().notify(this);
    }
}
class ConcreteColleagueB extends Colleague{
    public ConcreteColleagueB(Mediator mediator) {
        super(mediator);
    }
    public void operation(){
        getMediator().notify(this);
    }
}

셋째, 중재자 패턴 요약

  • 느슨한 결합

물체 내부 동료 매개로 패키지 오브젝트의 복수의 상호 작용에 의한 패턴 중재자 때문에 동료 오브젝트 간의 느슨한 결합있다.

  • 중앙 집중식 관리의 상호 작용

동료 상호 작용하는 여러 객체는 객체는, 중재자 중앙 집중식 관리를 내부에 캡슐화되어 있으므로 중재자 만에 개체를 수정해야하는 경우 이러한 상호 작용을 변경하는 것이.

  • 오브젝트 간의 관계를 간소화

동료와의 관계는 종종 많은 많은의 대상이되는 중재자 패턴을 사용하지 않는 한, 중재자의 도입이 주제와 동료 관계 중재자 객체는 일반적으로되고, 객체 양방향 일대.

  • 단점 모드

내 동료의 많은 아주 대화 형 객체 때, 중재자 객체 관리 및 유지 보수가 매우 복잡하고 어려워 질 이어질 수있는 복잡한 동안 하나의 잠재적 인 단점은, 중재자 패턴, 과도한 집중이다.

넷째, 소스 주소

GitHub·地址
https://github.com/cicadasmile/model-arithmetic-parent
GitEE·地址
https://gitee.com/cicadasmile/model-arithmetic-parent

추천

출처www.cnblogs.com/cicada-smile/p/11838353.html