中介者模式

应用场景:把很多对象牵线搭桥做事情。

比如A类中的方法调用了B和C类的方法,而B类的方法又调用了A类和C类方法,这种情况就可以考虑中介者模式

public class MediumPattern {

    public static class ModeleA{
        public void play(){
            ModeleB modeleB = new ModeleB();
            modeleB.deal("模块A");
            ModeleC modeleC = new ModeleC();
            modeleC.deal("模块A");
        }
        public void deal(String girl){
            System.out.println(girl + "调用模块A方法...");

        }
    }

    public static class ModeleB{

        public void play(){
            ModeleA modeleA = new ModeleA();
            modeleA.deal("模块B");
            ModeleC modeleC = new ModeleC();
            modeleC.deal("模块B");
        }
        public void deal(String girl){
            System.out.println(girl + "调用模块B方法...");

        }
    }

    public static class ModeleC{
        public void play(){
            ModeleA modeleA = new ModeleA();
            modeleA.deal("模块C");
            ModeleB modeleB = new ModeleB();
            modeleB.deal("模块C");
        }
        public void deal(String girl){
            System.out.println(girl + "调用模块C方法...");

        }
    }

    public static void main(String[] args) {
        ModeleA modeleA = new ModeleA();
        modeleA.play();
    }
}

 这个时候相互之间耦合度严重,模块之间的互相调用可以通过一个中间协调者来操作,这个时候就可以使用到中介者模式。

中介者要知道所有模块,这样才能协调它们

public class MediumPatternExt{

    private ModeleA modeleA ;
    private ModeleB modeleB ;
    private ModeleC modeleC ;

    public void playModelA(){
        modeleB.deal("模块A");
        modeleC.deal("模块A");
    }

    public void playModelB(){
        modeleA.deal("模块B");
        modeleC.deal("模块B");
    }

    public void playModelC(){
        modeleA.deal("模块C");
        modeleB.deal("模块C");
    }

    public void setModeleA(ModeleA modeleA) {
        this.modeleA = modeleA;
    }

    public void setModeleB(ModeleB modeleB) {
        this.modeleB = modeleB;
    }

    public void setModeleC(ModeleC modeleC) {
        this.modeleC = modeleC;
    }

    public ModeleA getModeleA() {
        return modeleA;
    }

    public ModeleB getModeleB() {
        return modeleB;
    }

    public ModeleC getModeleC() {
        return modeleC;
    }

    public static class ModeleA{
        private  MediumPatternExt mediumPatternExt ;

        public ModeleA(MediumPatternExt mediumPatternExt) {
            this.mediumPatternExt = mediumPatternExt;
            this.mediumPatternExt.setModeleA(this);
        }

        public void play(){
            mediumPatternExt.playModelA();
        }
        public void deal(String girl){
            System.out.println(girl + "调用模块A方法...");

        }
    }

    public static class ModeleB{
        private  MediumPatternExt mediumPatternExt ;

        public ModeleB(MediumPatternExt mediumPatternExt) {
            this.mediumPatternExt = mediumPatternExt;
            this.mediumPatternExt.setModeleB(this);
        }

        public void play(){
            mediumPatternExt.playModelB();
        }

        public void deal(String girl){
            System.out.println(girl + "调用模块B方法...");

        }
    }

    public static class ModeleC{
        private  MediumPatternExt mediumPatternExt ;

        public ModeleC(MediumPatternExt mediumPatternExt) {
            this.mediumPatternExt = mediumPatternExt;
            this.mediumPatternExt.setModeleC(this);
        }
        public void play(){
            mediumPatternExt.playModelC();
        }
        public void deal(String girl){
            System.out.println(girl + "调用模块C方法...");

        }
    }

    public static void main(String[] args) {
        MediumPatternExt mediumPatternExt = new MediumPatternExt();
        ModeleA modeleA1 = new ModeleA(mediumPatternExt);
        ModeleB modeleB = new ModeleB(mediumPatternExt);
        ModeleC modeleC = new ModeleC(mediumPatternExt);
        modeleA1.play();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值