中介者设计模式是一种非常常见的设计模式,其中我们最为熟悉的就是我们的MVC框架,其中的C作为控制器就是一个具体的中介者,它的作用是把业务逻辑(Model),和视图(Viwe)隔离开来,使M V协调工作,把M运行的的结果和V代表的视图融合成一个前端可以展示的页面,减少M 和V的依赖关系,现在MVC框架也是一个非常成熟的框架,这也是中介者模式优点的一个体现。
下面是我在书上面看过的一个例子,它的大概意思就是进销存:
如图所示:
通过中介者之后使得各个类之间不用相互打扰,有什么需要交互的直接通知中介者,让中介者来统一解决。
下面我通过上面这个例子用代码模拟出来,里面其实也就讲解了,中介者所起到的作用:
1:抽象中介者:
package mediator;
//这是一个抽象中介者,
public abstract class AbstractorMediator {
protected Purchase purchase;
protected Sale sale;
protected Stock stock;
//构造函数
public AbstractorMediator(){
purchase = new Purchase(this);
sale = new Sale(this);
stock = new Stock(this);
}
//中介者中最重要的方法 叫做事件方法,处理多个对象之间的关系。
public abstract void execute(String str,Object...objects);
}
package mediator;
/**
*这是抽象中介者的具体实现类,里面其中定义了多个私有方法,其目的就是为了处理各个对象之间的依赖关系。
* @author Administrator
*
*/
public class Mediator extends AbstractorMediator{
@Override
public void execute(String str, Object... objects) {
//中介者中最重要的方法
if(str.equals("purchase.buy")){
this.buyComputer((Integer)objects[0]);
}else if(str.equals("sale.sell")){
this.sellComputer((Integer)objects[0]);
}else if(str.equals("sell.offSell")){
this.offSell();
}else if(str.equals("stock.clear")){
this.clearStock();
}
}
private void buyComputer(int number){
int saleStatus = super.sale.getSaleStatus();
if(saleStatus>80){
System.out.println("采购电脑的 "+ number+" 台");
super.stock.increase(number);
}else{
int buyNumber = number/2;
System.out.println("采购IBM电脑: "+ buyNumber+" 台");
}
}
private void sellComputer(int number){
if(super.stock.getStockNumber()<number){
super.purchase.buyIBMcomputer(number);
}
super.stock.decrease(number);
}
private void offSell(){
System.out.println("折价销售电脑 "+ stock.getStockNumber());
}
private void clearStock(){
super.sale.offSale();
super.purchase.refuseBuyIBMcomputer();
}
}
package mediator;
/**
* 这个是同事类的抽象
* @author Administrator
*
*/
public class AbstractorColleague {
protected AbstractorMediator mediator;
public AbstractorColleague(AbstractorMediator _mediator){
this.mediator = _mediator;
}
}
package mediator;
//同事类的具体实现
public class Purchase extends AbstractorColleague{
public Purchase(AbstractorMediator _mediator) {
super(_mediator);
}
//采购电脑
public void buyIBMcomputer(int number){
super.mediator.execute("buy computer", number);
}
public void refuseBuyIBMcomputer(){
System.out.println("dont buy it");
}
}
package mediator;
import Java.util.Random;
public class Sale extends AbstractorColleague{
public Sale(AbstractorMediator _mediator) {
super(_mediator);
}
//销售电脑
public void sellIBMComputer(int number){
super.mediator.execute("sale.sell", number);
System.out.println("销售情况 "+ number +" 台");
}
public int getSaleStatus(){
Random rand = new Random(System.currentTimeMillis());
int saleStatus = rand.nextInt(100);
System.out.println("电脑的销售情况为:"+saleStatus);
return saleStatus;
}
//折扣处理
public void offSale(){
super.mediator.execute("sale.offSell");
}
}
package mediator;
public class Stock extends AbstractorColleague{