设计模式-中介者模式

背景

现在有三个模块,A,B,C,这三个模块之间存在互相调用

使用设计模式之前

package com.design.mode.meditor;

public class Origin {
    public static class ModuleA {

        public void executeModule() {
            System.out.println("模块A开始执行其它模块");
            ModuleB moduleB = new ModuleB();
            ModuleC moduleC = new ModuleC();
            moduleB.execute();
            moduleC.execute();
        }

        public void execute() {
            System.out.println("模块A");
        }
    }

    public static class ModuleB {

        public void executeModule() {
            System.out.println("模块B开始执行其它模块");
            ModuleA moduleA = new ModuleA();
            ModuleC moduleB = new ModuleC();
            moduleB.execute();
            moduleA.execute();
        }

        public void execute() {
            System.out.println("模块B");
        }
    }

    public static class ModuleC {
        public void executeModule() {
            System.out.println("模块C开始执行其它模块");
            ModuleB moduleB = new ModuleB();
            ModuleA moduleA = new ModuleA();
            moduleB.execute();
            moduleA.execute();
        }

        public void execute() {
            System.out.println("模块C");
        }
    }

    public static void main(String[] args) {
        ModuleA moduleA = new ModuleA();
        ModuleB moduleB = new ModuleB();
        ModuleC moduleC = new ModuleC();
        moduleA.executeModule();
        moduleB.executeModule();
        moduleC.executeModule();
    }

}

缺点

很明显的可以看到三个模块之间互相依赖,耦合性非常强

 

使用中介者模式

package com.design.mode.meditor;

public class MeditorMode {

    public static class Meditor{
        private void ModuleAInvoke() {
            Origin.ModuleB moduleB = new Origin.ModuleB();
            Origin.ModuleC moduleC = new Origin.ModuleC();
            moduleB.execute();
            moduleC.execute();
        }

        private void ModuleBInvoke() {

            System.out.println("模块B开始执行其它模块");
            Origin.ModuleA moduleA = new Origin.ModuleA();
            Origin.ModuleC moduleB = new Origin.ModuleC();
            moduleB.execute();
            moduleA.execute();
        }

        private void ModuleCInvoke() {

            Origin.ModuleB moduleB = new Origin.ModuleB();
            Origin.ModuleA moduleA = new Origin.ModuleA();
            moduleB.execute();
            moduleA.execute();
        }
    }


    public static class ModuleA {

        public void executeModule() {
            System.out.println("模块A开始执行其它模块");
            meditor.ModuleAInvoke();
        }
        public void execute() {
            System.out.println("模块A");
        }

        private Meditor meditor;

        public ModuleA(Meditor meditor) {
            this.meditor = meditor;
        }
    }

    public static class ModuleB {

        public void executeModule() {
            System.out.println("模块B开始执行其它模块");
            meditor.ModuleBInvoke();
        }

        public void execute() {
            System.out.println("模块B");
        }

        private Meditor meditor;

        public ModuleB(Meditor meditor) {
            this.meditor = meditor;
        }
    }

    public static class ModuleC {

        public void executeModule() {
            System.out.println("模块C开始执行其它模块");
            meditor.ModuleCInvoke();
        }

        public void execute() {
            System.out.println("模块C");
        }

        private Meditor meditor;

        public ModuleC(Meditor meditor) {
            this.meditor = meditor;
        }

    }

    public static void main(String[] args) {
        Meditor meditor = new Meditor();
        ModuleA moduleA = new ModuleA(meditor);
        ModuleB moduleB = new ModuleB(meditor);
        ModuleC moduleC = new ModuleC(meditor);
        moduleA.executeModule();
        moduleB.executeModule();
        moduleC.executeModule();
    }
}

优点:模块之间通过中间者进行通信,进行了解耦,优点类似controller-service-dao这种三层架构

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值