1 介紹
Acey:大白呀大白你說你也老大不小了,咋還是個單身dog呢。
大白:那沒辦法呀,畢竟人太帥,學習太好,沒人要??。
小白:別聽大白瞎說,他要是帥,早就一群MM追啦,其實,老媽看他還沒有對象呀,就準備去婚介所找啦??。
大白:
Acey:??????,膩害了。不過在這之前,我們來看看中介者模式,有助于配對成功率提高哦。
大白:這.....
中介者模式:Mediator模式是行為模式的一種。在Mediator中,類之間的交互通常被放到Mediator中,而不同對象則通過Mediator對象和其他對象交互,Mediator起著控制器的作用。
小白: 嗯嗯,??這個模式中的Mediator就是婚介所吧,不同的類就是不同的人。
Acey:??對呀,當有了這個婚介所,單身dog找對象也就不用那么麻煩了,比如大白,不需要再去一個又一個的去找異性,了解他們,只需要通過婚介所,婚介所去處理,然后把合適的結果(適合對象)返回,這樣對單身dog來說也是個好辦法,而且也降低了不同單身dog之間的耦合度。
2 實現
首先來看看類圖
- Mediator:中介者的抽象父類
- ConcreteMediator:具體的中介者(婚介所)
- Colleagur:關聯者的抽象類
- ConcreteColleague:具體的關聯者(單身dog)
實現
第一步:創建具體中介者
Mediator.class
public class Mediator {
private Man man;
private Woman woman;
//婚介所設置簡單配對規則
public void getPair(){
if(man.getCondition().equals(woman.getCondition())){
System.out.println(man.getName()+"和"+woman.getName()+"條件符合,
適合配對");
}else{
System.out.println("二人條件不符,不予配對");
}
}
//設置兩人配對信息
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;
}
}
第二步:創建關聯者抽象類
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;
}
//向婚介所投個人信息,具體子類實現
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;
}
}
第三步:創建具體的關聯者
Man.class / Woman.class
public class Man extends Person{
public Man(Mediator mediator, String name, Integer condition) {
super(mediator, name, condition);
}
//向婚介所投個人信息
@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);
}
//向婚介所投個人信息
@Override
public void toMediator() {
this.getMediator().setWoman(this);
this.getMediator().getPair();
}
}
第四步:測試配對
MainClass.class
public class MainClass {
public static void main(String[] args) {
//創建婚介所
Mediator mediator = new Mediator();
//雙方信息
Man dabai = new Man(mediator, "大白", 10000);
Woman chunhua = new Woman(mediator, "春花", 5000);
//婚介所配對
mediator.setPair(dabai, chunhua);
//配對結果
mediator.getPair();
System.out.println("---------------換個人-------------------");
Woman linxuan = new Woman(mediator, "林軒", 10000);
//婚介所配對
mediator.setPair(dabai, linxuan);
mediator.getPair();
}
}
如果有多個中介者的話,我們可以再寫一個中介者抽象類,讓具體中介者繼承。
Acey:在使用了Mediator模式后,我們可以避免關聯者類之間的過度耦合,即我們找對象的時候也要貨比三家??(不恰當),去了解每個人的信息,而有了婚介所之后,我們只需要和婚介所打交道,從一對多到一對一,這樣每個關聯者之間就更加獨立,關聯者之間的關系也更加易于理解和維護。
Last
祝單身dog們迎娶白富美,走向人生巔峰。??
喜歡的話戳一下喜歡唄。
有什么建議的話希望大家能在下方回復??
上一篇:《解釋器模式 - 明天考試,戳不輟進來你自己看著辦》
下一篇:《職責鏈模式 - 為什么你的學費比別人貴?》