1 介紹
Acey:大白呀大白你說你也老大不小了录豺,咋還是個(gè)單身dog呢。
大白:那沒辦法呀饭弓,畢竟人太帥双饥,學(xué)習(xí)太好,沒人要??弟断。
小白:別聽大白瞎說咏花,他要是帥,早就一群MM追啦,其實(shí)昏翰,老媽看他還沒有對(duì)象呀苍匆,就準(zhǔn)備去婚介所找啦??。
大白:
Acey:??????棚菊,膩害了浸踩。不過在這之前,我們來看看中介者模式统求,有助于配對(duì)成功率提高哦检碗。
大白:這.....
中介者模式:Mediator模式是行為模式的一種。在Mediator中码邻,類之間的交互通常被放到Mediator中折剃,而不同對(duì)象則通過Mediator對(duì)象和其他對(duì)象交互,Mediator起著控制器的作用像屋。
小白: 嗯嗯怕犁,??這個(gè)模式中的Mediator就是婚介所吧,不同的類就是不同的人己莺。
Acey:??對(duì)呀奏甫,當(dāng)有了這個(gè)婚介所,單身dog找對(duì)象也就不用那么麻煩了凌受,比如大白扶檐,不需要再去一個(gè)又一個(gè)的去找異性,了解他們胁艰,只需要通過婚介所,婚介所去處理智蝠,然后把合適的結(jié)果(適合對(duì)象)返回腾么,這樣對(duì)單身dog來說也是個(gè)好辦法,而且也降低了不同單身dog之間的耦合度杈湾。
2 實(shí)現(xiàn)
首先來看看類圖
- Mediator:中介者的抽象父類
- ConcreteMediator:具體的中介者(婚介所)
- Colleagur:關(guān)聯(lián)者的抽象類
- ConcreteColleague:具體的關(guān)聯(lián)者(單身dog)
實(shí)現(xiàn)
第一步:創(chuàng)建具體中介者
Mediator.class
public class Mediator {
private Man man;
private Woman woman;
//婚介所設(shè)置簡(jiǎn)單配對(duì)規(guī)則
public void getPair(){
if(man.getCondition().equals(woman.getCondition())){
System.out.println(man.getName()+"和"+woman.getName()+"條件符合解虱,
適合配對(duì)");
}else{
System.out.println("二人條件不符,不予配對(duì)");
}
}
//設(shè)置兩人配對(duì)信息
public void setPair(Man man , Woman woman){
this.man = man;
this.woman = woman;
}
public Man getMan() {
return man;
}
public void setMan(Man man) {
this.man = man;
}
public Woman getWoman() {
return woman;
}
public void setWoman(Woman woman) {
this.woman = woman;
}
}
第二步:創(chuàng)建關(guān)聯(lián)者抽象類
Person.class
//抽象類漆撞,包含基本信息
public abstract class Person {
private String name;
private Integer condition;
private Mediator mediator;
public Person(Mediator mediator, String name, Integer condition) {
this.mediator = mediator;
this.name = name;
this.condition = condition;
}
//向婚介所投個(gè)人信息殴泰,具體子類實(shí)現(xiàn)
public abstract void toMediator();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Mediator getMediator() {
return mediator;
}
public void setMediator(Mediator mediator) {
this.mediator = mediator;
}
public Integer getCondition() {
return condition;
}
public void setCondition(Integer condition) {
this.condition = condition;
}
}
第三步:創(chuàng)建具體的關(guān)聯(lián)者
Man.class / Woman.class
public class Man extends Person{
public Man(Mediator mediator, String name, Integer condition) {
super(mediator, name, condition);
}
//向婚介所投個(gè)人信息
@Override
public void toMediator() {
this.getMediator().setMan(this);
this.getMediator().getPair();
}
}
public class Woman extends Person{
public Woman(Mediator mediator, String name, Integer condition) {
super(mediator, name, condition);
}
//向婚介所投個(gè)人信息
@Override
public void toMediator() {
this.getMediator().setWoman(this);
this.getMediator().getPair();
}
}
第四步:測(cè)試配對(duì)
MainClass.class
public class MainClass {
public static void main(String[] args) {
//創(chuàng)建婚介所
Mediator mediator = new Mediator();
//雙方信息
Man dabai = new Man(mediator, "大白", 10000);
Woman chunhua = new Woman(mediator, "春花", 5000);
//婚介所配對(duì)
mediator.setPair(dabai, chunhua);
//配對(duì)結(jié)果
mediator.getPair();
System.out.println("---------------換個(gè)人-------------------");
Woman linxuan = new Woman(mediator, "林軒", 10000);
//婚介所配對(duì)
mediator.setPair(dabai, linxuan);
mediator.getPair();
}
}
如果有多個(gè)中介者的話,我們可以再寫一個(gè)中介者抽象類浮驳,讓具體中介者繼承悍汛。
Acey:在使用了Mediator模式后,我們可以避免關(guān)聯(lián)者類之間的過度耦合至会,即我們找對(duì)象的時(shí)候也要貨比三家??(不恰當(dāng))离咐,去了解每個(gè)人的信息,而有了婚介所之后,我們只需要和婚介所打交道宵蛀,從一對(duì)多到一對(duì)一昆著,這樣每個(gè)關(guān)聯(lián)者之間就更加獨(dú)立,關(guān)聯(lián)者之間的關(guān)系也更加易于理解和維護(hù)术陶。
Last
祝單身dog們迎娶白富美凑懂,走向人生巔峰。??
喜歡的話戳一下喜歡唄梧宫。
有什么建議的話希望大家能在下方回復(fù)??
上一篇:《解釋器模式 - 明天考試接谨,戳不輟進(jìn)來你自己看著辦》
下一篇:《職責(zé)鏈模式 - 為什么你的學(xué)費(fèi)比別人貴?》