设计模式------中介者模式
中介者模式:
定义一个对象来封装一系列对象的交互.
中介者的四个角色:
1.mediator(抽象中介者)
2.concretemediator(具体中介者)
3.colleague(抽象同事类)
4.concretecolleague(具体同事类)
举例说明:
例如公司开发一套crm系统,该系统负责编辑客户的信息,其中有一个ui界面负责显示和修改客户信息.
该界面包括列表框,组合框,文本框,在这三个框内编辑用户信息,其他框内的信息都要相应的改变.
具体实现:
/**
*
* @classname: mediator
* @description: 抽象中介者类
* @author haibiscuit
* @date 2019年10月22日 下午5:10:26
*
*/
public abstract class mediator {
arraylist<mycomponent> arraylist;
protected void addmycomponent(mycomponent c) {
if (null == arraylist) {
arraylist = new arraylist<mycomponent>();
}
arraylist.add(c);
};
public abstract void componentchanged(mycomponent c);
}
/**
*
* @classname: concretemediator
* @description: 具体中介者类
* @author haibiscuit
* @date 2019年10月22日 下午5:11:41
*
*/
public class concretemediator extends mediator{
// 封装同事对象的交互
@override
public void componentchanged(mycomponent c) {
for (mycomponent mycomponent : arraylist) {
mycomponent.update();
}
}
}
/**
*
* @classname: mycomponent
* @description: 抽象组件类,充当抽象同事类
* @author haibiscuit
* @date 2019年10月22日 下午5:07:02
*
*/
public abstract class mycomponent {
protected mediator mediator;
public void setmediator(mediator mediator) {
this.mediator = mediator;
}
//转发调用
public void changed() {
mediator.componentchanged(this);
}
public abstract void update();
}
/**
*
* @classname: mycombobox
* @description: 组合框类,充当同事类
* @author haibiscuit
* @date 2019年10月22日 下午5:21:05
*
*/
public class mycombobox extends mycomponent{
@override
public void update() {
system.out.println("组合框修改信息");
}
}
/**
*
* @classname: mylist
* @description: 列表框类,充当具体同事
* @author haibiscuit
* @date 2019年10月22日 下午5:19:11
*
*/
public class mylist extends mycomponent{
@override
public void update() {
system.out.println("列表框修改信息");
}
}
/**
*
* @classname: mytextbox
* @description: 文本框类,充当同事类
* @author haibiscuit
* @date 2019年10月22日 下午5:19:45
*
*/
public class mytextbox extends mycomponent{
@override
public void update() {
system.out.println("文本框修改信息");
}
}
总结:
中介者模式很像观察者模式,具体的使用场景和比较可以参考观察者模式.
上一篇: 关于Dapper.NET的相关论述