我昨天说今天要写啥来着。。。算了随便写一个仲裁者模式(因为要交orz
仲裁者模式,又叫中介者模式,就是定义一个对象,用来封装一组对象交互关系的实现,以降低交互对象显式调用耦合,使之自由变化。
仲裁者模式的应用场景:
- 一组对象以有规律的方式交互,但交互方式复杂。
- 因某个对象引用并且和多个对象交互难以复用。
- 分布在不同类中的某个行为不使用多个子类进行定制。
缺点:仲裁者对象实现复杂,且难以维护。
以下是仲裁者模式的结构图:
![](https://i-blog.csdnimg.cn/blog_migrate/96f7fe51ca5692528876a2037a339a2a.png)
使用仲裁者模式,完成以下实例:客户Patron可以向订单管理员Staff请求配送订单,当Staff收到请求后,验证客户订单,如果通过立即指派订单配送员Deliever进行配送;当Deliever接受订单配送指令后,向Staff和Patron响应配送状态信息。
先画个类图:
java实现:
(1)OMediator(仲裁者类)
package 仲裁者模式;
public class OMediator {
Patron p;
Staff s;
Deliever d;
//验证订单
public void verifyOrder() {
s.Verify();
}
//订单派送
public void delieverOrder(){
d.delieverOrder();
}
//接收配送状态信息
public void Responce() {
p.getResponse();
s.getResponse();
}
}
(2)Colleague类
package 仲裁者模式;
public class Colleague {
protected OMediator om;
public Colleague(OMediator om) {
this.om = om;
}
}
(3)Staff类
package 仲裁者模式;
public class Staff extends Colleague{
public Staff(OMediator om) {
super(om);
}
//验证订单,这里我们默认为验证通过
public void Verify() {
if(true) {
System.out.println("订单验证通过 ---Staff");
om.delieverOrder();
}
}
//接收配送状态信息
public void getResponse(){
System.out.println("Staff收到订单状态");
}
}
(4)Patron类
package 仲裁者模式;
public class Patron extends Colleague{
public Patron(OMediator om) {
super(om);
}
//请求配送订单
public void RequestOrder() {
om.verifyOrder();
}
//接收配送状态信息
public void getResponse(){
System.out.println("Patron收到订单状态");
}
}
(5)Deliever类
package 仲裁者模式;
public class Deliever extends Colleague{
public Deliever(OMediator om) {
super(om);
}
//配送订单
public void delieverOrder() {
System.out.println("Deliever接单 ");
om.Responce();
}
}
(6)调用
package 仲裁者模式;
public class Main {
public static void main(String[] args) {
OMediator om = new OMediator();
Patron p = new Patron(om);
Staff s = new Staff(om);
Deliever d = new Deliever(om);
om.p = p;
om.s = s;
om.d = d;
p.RequestOrder();
}
}
输出:
emmmm发现写的一些函数名不太符合命名规范,我知道错了我以后不敢了!(其实是已经十一点了我想去睡觉不想改了orz