您现在的位置是:首页 >学无止境 >设计模式之中介者模式网站首页学无止境

设计模式之中介者模式

梧桐碎梦 2024-06-17 11:28:01
简介设计模式之中介者模式

中介者模式的定义是:用一个中介对象封装一系列的对象交互,中介者使各对象不需要显式地相互作用,从而使其耦合松散,而且可以独立地改变它
们之间的交互。

中介者模式适合于组件之间过于耦合而不方便修改的情况。因为中介者模式强制组件之间只通过中介者交互,而不是组件之间直接交互,避免组件之间相互依赖紧密耦合,方便于修改。类所拥有的依赖关系越少, 就越易于修改、 扩展或复用。

因为交互都是通过中介者来实现,所以需要在中介者中定义交互的所有方法。

ComponentA
-m:Mediator
+operationA()
ComponentB
-m:Mediator
+operationB()
«interface»
Mediator
+notify()
ConcrateMediator
- ComponentA
- ComponentB
+notify()
+operationA()
+operationB()

代码实现:

// 抽象组件
public abstract class Plane {  
    protected Mediator mediator;  
  
    public void setMediator(Mediator mediator) {  
        this.mediator = mediator;  
    }  
  
    abstract void notifyMsg(String msg);  
  
    abstract void receiveMsg(String msg);  
}
public class PlaneA extends Plane {  
  
    @Override  
    public void notifyMsg(String msg) {  
        System.out.println("PlaneA 通知控制塔:" + msg);  
        mediator.notifyOtherPlane(this, msg);  
    }  
  
    @Override  
    public void receiveMsg(String msg) {  
        System.out.println("PlaneA 收到控制塔通知:" + msg);  
    }  
}


public class PlaneB extends Plane {  
  
    @Override  
    public void notifyMsg(String msg) {  
        System.out.println("PlaneB 通知控制塔:"+msg);  
        mediator.notifyOtherPlane(this,msg);  
    }  
  
    @Override  
    public void receiveMsg(String msg) {  
        System.out.println("PlaneB 收到控制塔通知:"+msg);  
    }  
}
// 抽象中介者
public interface Mediator {  
    void notifyOtherPlane(Plane plane, String msg);  
}
public class ControllerTower implements Mediator{  
    Plane planeA;  
    Plane planeB;  
  
    public void setPlaneA(Plane planeA) {  
        this.planeA = planeA;  
    }  
  
    public void setPlaneB(Plane planeB) {  
        this.planeB = planeB;  
    }  
  
    @Override  
    public void notifyOtherPlane(Plane plane, String msg) {  
        if(plane==planeA){  
            planeB.receiveMsg("PlanA 需要"+msg);  
        }else if(plane==planeB){  
            planeA.receiveMsg("PlanB 需要"+msg);  
        }  
    }  
}
Plane planeA=new PlaneA();  
Plane planeB=new PlaneB();  
ControllerTower tower=new ControllerTower();  
tower.setPlaneA(planeA);  
tower.setPlaneB(planeB);  
planeA.setMediator(tower);  
planeB.setMediator(tower);  
planeA.notifyMsg("起飞");

中介者模式的优点是减低组件间的耦合度,方便修改组件。

缺点是由于中介者需要定义组件间交互的所有方法,容易变成上帝对象。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。