设计模式之中介者模式

1、核心

-如果一个系统中对象之间的联系呈现为网状结构,对象之间存在大量多对多关系,将导致关系及其复杂,这些对象称为“同事对象”
-我们可以引入一个中介者对象,使各个同事对象只跟中介者对象打交道,将复杂的网络结构化解为如下的星形结构
中介者模式
结构图:
中介者模式——结构图

2、本质

解耦多个同事对象之间的交互关系。每个对象都持有中介者对象的引用,只跟中介者对象打交道。我们通过中介者对象统一管理这些交互关系。

3、应用场景

-MVC模式(其中的C,控制器就是一个中介者对象。M和C都和他打交道)
-窗口游戏程序,窗口软件开发中窗口对象也是一个中介者对象
-图形界面开发GUI中,多个组件之间的交互,可以通过引入一个中介者对象来解决,可以是整体的窗口对象或者DOM对象
-java.lang.reflect.Method#invoke()

4、代码示例

问题:
中介者模式——问题引出
UML图:
中介者模式

/**
 * 部门抽象接口
 * @author ly1
 *
 */
public interface IDepartment {
    void selfAction();
    void outAction();
}
/**
 * 财务部
 * @author ly1
 *
 */
public class Financial implements IDepartment{
    private IMediator mediator;

    public Financial(IMediator mediator) {
        super();
        this.mediator = mediator;
        mediator.register("financial", this);
    }

    @Override
    public void selfAction() {
        System.out.println("数钱!");
    }

    @Override
    public void outAction() {
        mediator.comand("financial");
    }

}
/**
 * 开发部
 * @author ly1
 *
 */
public class Development implements IDepartment{
    private IMediator mediator;

    public Development(IMediator mediator) {
        super();
        this.mediator = mediator;
        mediator.register("development", this);
    }

    @Override
    public void selfAction() {
        System.out.println("项目开发中!");
    }

    @Override
    public void outAction() {
        mediator.comand("financial");
    }

}
/**
 * 研发部
 * @author ly1
 *
 */
public class Research implements IDepartment{
    private IMediator mediator;

    public Research(IMediator mediator) {
        super();
        this.mediator = mediator;
        mediator.register("research", this);
    }

    @Override
    public void selfAction() {
        System.out.println("研究中!");
    }

    @Override
    public void outAction() {
        mediator.comand("financial");
    }

}
/**
 * 中介抽象接口
 * @author ly1
 *
 */
public interface IMediator {
    void comand(String comand);
    void register(String name,IDepartment department);
}
import java.util.HashMap;
import java.util.Map;

/**
 * 具体中介类:总经理
 * @author ly1
 *
 */
public class President implements IMediator{

    private Map<String,IDepartment> list = new HashMap<String,IDepartment>();

    @Override
    public void comand(String comand) {
        list.get(comand).selfAction();
    }

    @Override
    public void register(String name, IDepartment department) {
        list.put(name, department);
    }

}
/**
 * 客户端调用
 * @author ly1
 *
 */
public class Client {
    public static void main(String[] args) {
        IMediator mediator = new President();

        IDepartment f = new Financial(mediator);
        IDepartment d = new Development(mediator);
        IDepartment r = new Research(mediator);

        d.selfAction();
        d.outAction();
    }
}

结果:
项目开发中!
数钱!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
中介者模式是C嵌入式编程设计模式中的一种。它是指一个中介者对象,可以将多个对象进行耦合并将其之间的通信及操作经过中介者进行协调,这样可以降低系统各模块之间的相互依赖性,提高系统的可维护性和可扩展性,也使代码更加易于理解和修改。 在C嵌入式编程中,很多时候需要实现某些功能,需要让多个模块进行协作,这样的话就会出现很多的依赖和复杂的流程控制,随着模块的增多,这种情况只会愈加严重。这时候就可以使用中介者模式,让一个中介者对象来协调这些模块之间的通信和操作,从而使得各个模块相对独立,更容易维护和扩展。 举个例子,如果要在一个嵌入式系统中实现串口通信和IO口操作,可能需要多个模块进行协作,比如有一个串口接收模块、一个串口发送模块、一个IO口输出模块等等。这些模块之间需要进行相互通信和操作,如果使用多重嵌套的函数调用,代码会变得异常复杂,而且增加或修改功能也很麻烦。如果使用中介者模式来实现,可以让一个中介者对象管理这些模块,对外提供接口,其他模块只需要调用中介者提供的接口即可,大大降低了代码的复杂度。 总之,中介者模式是一种非常好用的设计模式,特别适合用于C嵌入式编程中。它可以消除模块之间的依赖,让系统更加稳定和易于维护,也方便了新功能的加入和修改。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值