十六、设计模式之中介者模式【Mediator 】
所属类型 | 定义 |
---|---|
行为型 | 用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护 |
能帮我们干什么?
主要解决什么问题?
主要解决的是 对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同时若一个对象发生改变,我们也需要跟踪与之相关联的对象,同时做出相应的处理
**何时使用:**多个类相互耦合,形成了网状结构。
**如何解决:**将上述网状结构分离为星型结构。
优缺点
优点
1、降低了类的复杂度,将一对多转化成了一对一。
2、各个类之间的解耦。
3、符合迪米特原则。
缺点:
中介者会庞大,变得复杂难以维护。
使用的场景
1、系统中对象之间存在比较复杂的引用关系,导致它们之间的依赖关系结构混乱而且难以复用该对象。
2、想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类。
**注意事项:**不应当在职责混乱的时候使用。
角色
1、中介者
**关键代码:**在抽象类里有一个 ArrayList 存放观察者们。
观察模式
难度: ⭐️
样例代码
java/com/kongxiang/raindrop/dp/type/behavior/mediator · master · 无难事者若执 / 23种设计模式 · GitCode
描述:
就和我们现实中的中介一样。
房产局,银行,买房人,卖方人,国土局。如果让买房人自己跑。一会要去银行验资,一会要去房产局。很多细节。
加入一个中介者。买房人只会去中介。中介去联系其他。有事没事找中介。中介业务就很多很杂。导致中介本身的复杂度。
但也保证了对象间协作的松耦合。易于代码维护。
public static void main(String[] args) throws Exception {
HomeRegister homeRegister = new HomeRegister();
Mediator m = new Mediator(homeRegister);
Bank bank = new Bank();
m.setBank(bank);
String homerName = "lisi";
Home home = new Home(homerName,100000);
homeRegister.register(homerName,home);
Homer homer = new Homer(homerName,home);
// 申请卖房
m.registerHomer(homer);
// 买房流程
String buyerName = "zhangsan";
Buyer buyer = new Buyer(buyerName,2000);
System.out.println("买家买了房子 :买家" + buyer.name + " 房子"+ buyer.home +" 余额"+buyer.money);
System.out.println("卖家卖了房子 :卖家" + homer.name + " 房子"+ homer.home +" 余额"+homer.money);
System.out.println("买房前");
buyer.buyHome(m);
System.out.println("买家买了房子 :买家" + buyer.name + " 房子"+ buyer.home +" 余额"+buyer.money);
System.out.println("卖家卖了房子 :卖家" + homer.name + " 房子"+ homer.home +" 余额"+homer.money);
}
买家买房
public void buyHome(Mediator mediator) throws Exception {
Homer homer = mediator.findHomer();
mediator.checkCredit(this);
mediator.checkMoney(this.money, homer.home.price);
mediator.deal(this, homer);
}
总结
中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。