中介者模式(Mediator Pattern)用来降低多个对象之间的通信耦合问题,这样各对象之间具有了松耦合性,避免了对象之间的复杂网状关联,而是给出一个星状结构,星状结构的中心为中介者类。平常使用的银行系统,以及MVC(C是M和V的中介)。
一、需求举例:
在银行系统中,银行作为中介者,提供人与人之间的转账服务,下面以Man向Women转账为例。
二、类图:
三、代码实例:
1.抽象人员类:Person
package com.lance.mediator;
public abstract class Person {
protected Mediator mediator;
protected String name;
protected String gender;
public Person(String name, String gender,Mediator mediator) {
this.name = name;
this.gender = gender;
this.mediator = mediator;
}
public boolean transferMoney(String currency, double moneyAmount, Person person) {
return mediator.transferTo(currency, moneyAmount, person);
}
}
2.男人类:Man
package com.lance.mediator;
public class Man extends Person {
public Man(String name, String gender,Mediator mediator) {
super(name, gender,mediator);
}
}
3.女人类:Women
package com.lance.mediator;
public class Women extends Person {
public Women(String name, String gender, Mediator mediator) {
super(name, gender, mediator);
}
}
4.中介者父类:Mediator
package com.lance.mediator;
public interface Mediator {
boolean transferTo(String currency, double moneyAmount,Person person);
}
5.银行中介者:BankMediator
package com.lance.mediator;
public class BankMediator implements Mediator {
private Person fromPerson;
public BankMediator() {
}
public void setFromPerson(Person fromPerson) {
this.fromPerson = fromPerson;
}
@Override
public boolean transferTo(String currency, double moneyAmount, Person person) {
if(moneyAmount <= 0) {
return false;
}
System.out.println("transfer " + currency + moneyAmount + " from " + fromPerson.name + " to " + person.name);
return true;
}
}
6.主类:MediatorPattern
package com.lance.mediator;
public class MediatorPattern {
public static void main(String[] args) {
System.out.println("==========start==========");
BankMediator bankMediator = new BankMediator();
Person man = new Man("husband", "male", bankMediator);
Person women = new Women("wife", "female", bankMediator);
bankMediator.setFromPerson(man);
man.transferMoney("CNY", 10000, women);
System.out.println("==========end==========");
}
}
输出结果:
==========start==========
transfer CNY10000.0 from husband to wife
==========end==========
网友评论