-
中介者模式可以提供双方的媒介,而代理者模式只能代理其中的一方
-
终结者模式用一个终结对象类封装一系列的对象交互,中介者使各对象不需要显式的相互引用,达到解耦的效果,并且可以独立的改变他们之间的交互。
-
中介者模式的UML图
-
Mediator抽象中介者模式;ConcreteMediator具体中介者,需要知道所有具体同事类,同时需要从具体同事类那里接受信息,并且向具体同事类发送信息;Colleague抽象同事类;ConcreteColleague具体同事类,每个具体同事类都只需要知道自己的行为即可,但是他们都需要认识中介者。
-
在中介者模式中中介者对象处于核心地位,因为它定义了整个系统中所有具体同事类之间的关系,在整个系统中它主要承担两方面的责任。充当了消息中转站的角色。
-
中介者模式的代码实现
-
创建一个抽象中介者类
/** * 抽象中介者,收集信息、转发信息 */ public abstract class Mediator { public abstract void contact(String message, Person person); }
-
创建一个抽象同事类
/** * 抽象同事类 */ public abstract class Person { Mediator mediator; String name; public Person(Mediator mediator, String name) { this.mediator = mediator; this.name = name; } }
-
创建两个具体同事类
/** * 具体同事类,房屋拥有者 */ public class HouseOwner extends Person { public HouseOwner(Mediator mediator, String name) { super(mediator, name); } /** * 联系中介者 * @param message */ public void contact(String message){ mediator.contact(message, this); } /** * 获取信息 * @param message */ public void getMessage(String message){ System.out.println("我是房主,我有房,我叫: " + name +", 接收到了您的信息: " + message); } }
/** * 具体同事类,租房者 */ public class HouseTenent extends Person{ public HouseTenent(Mediator mediator, String name) { super(mediator, name); } /** * 联系中介者 * @param message */ public void contact(String message){ mediator.contact(message, this); } /** * 获取信息 * @param message */ public void getMessage(String message){ System.out.println("我是租房的,我没房,我叫:" + name + ", 接收到了您的信息: " + message); } }
-
创建一个具体中介者类
/** * 具体中介者类 */ public class ConcreteMediator extends Mediator { private HouseOwner houseOwner; private HouseTenent houseTenent; /** * 发送信息给具体同事类 * @param message * @param person */ @Override public void contact(String message, Person person) { if(person == houseOwner){ //中介者帮助卖方者向买房者发送信息 houseTenent.getMessage(message); } else if(person == houseTenent){ //中介者帮助买房者向卖方者发送信息 houseOwner.getMessage(message); } else { System.out.println("无人接受"); } } public HouseOwner getHouseOwner() { return houseOwner; } public void setHouseOwner(HouseOwner houseOwner) { this.houseOwner = houseOwner; } public HouseTenent getHouseTenent() { return houseTenent; } public void setHouseTenent(HouseTenent houseTenent) { this.houseTenent = houseTenent; } }
-
创建测试类
public class Test { public static void main(String[] args) { ConcreteMediator concreteMediator = new ConcreteMediator(); HouseOwner houseOwner = new HouseOwner(concreteMediator, "卖家--小张"); HouseTenent houseTenent = new HouseTenent(concreteMediator, "买家--小李"); concreteMediator.setHouseOwner(houseOwner); concreteMediator.setHouseTenent(houseTenent); houseOwner.contact("我有3套房,打算卖一套,100万,不讲价"); houseTenent.contact("我有200万,我要买房"); } }
-
-
代理模式与中介者模式的区别
代理模式只代表其中的一方,信息的传输是单向的;中介中模式代表双方,信息的传输是双向的
-
中介者模式的优点
- 简化了对象之间的关系,将系统的各个对象之间的相互关系进行封装,将各个同事类解耦,使系统成为松耦合的系统
- 减少了子类的生成
- 可以减少各同事类的设计与实现
-
中介者模式的缺点
由于中介者对象封装了系统中对象之间的相互关系,导致其变得非常复杂,使得系统维护比较困难。
-
中介者模式的使用场景
- 系统中对象之间存在比较复杂的引用关系,导致他们之间的依赖关系混乱而且难以复用该对象。
- 想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类。
-
JDK中对中介者模式的使用
设计模式--中介者模式
最新推荐文章于 2024-10-04 19:09:21 发布