이 문서 출처 : 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