欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

设计模式:中介模式

程序员文章站 2022-03-30 10:13:10
中介这个词语在现实生活中很常见,我们买房租房找中介,通过中介完成买卖房屋,买房和卖方直接和中介交流,完成交易合同。 房产中介,第三方平台,支付宝这些等都属于中介。他们在中间从当一个中间人的作用,承担交易双方的业务流程。 核心:中介者对象,该对象使一些复杂的业务处理简化,使各业务处理对象直接和中介者打 ......

  中介这个词语在现实生活中很常见,我们买房租房找中介,通过中介完成买卖房屋,买房和卖方直接和中介交流,完成交易合同。

房产中介,第三方平台,支付宝这些等都属于中介。他们在中间从当一个中间人的作用,承担交易双方的业务流程。

核心:中介者对象,该对象使一些复杂的业务处理简化,使各业务处理对象直接和中介者打交道。

设计模式:中介模式

例子:模拟公司业务处理。总经理充当中介者角色,负责协调各部门。

/**
 * 中介者抽象接口
 */
public interface mediator {
    //管理对象
    void register(string name, department department);
    //调用对象
    void command(string something);
}

  

/**
 * 部门内部对象接口
 */
public interface department {
    //完成部门任务
    void dosomething();
    //向中介者汇报,通知中介者调用
    void apply();
}

  

public class finacialdepartment implements department {

    //持有中介者对象
    private mediator mediator;

    public finacialdepartment(mediator mediator) {
        this.mediator = mediator;
        mediator.register("finacial", this);
    }

    @override
    public void dosomething() {
        system.out.println("财务部门工作");
    }

    @override
    public void apply() {
        system.out.println("财务汇报工作");
    }
}

  

/**
 * 研发部门
 */
public class development implements department {

    //持有中介者对象
    private mediator mediator;

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

    @override
    public void dosomething() {
        system.out.println("研发部门工作");
    }

    @override
    public void apply() {
        system.out.println("研发部门汇报工作需要财务部门支持。");
        //通知中介者,调用其他对象方法
        mediator.command("finacial");

    }
}

  

/**
 * 具体中介者
 */
public class manager implements mediator {

    private map<string, department> map = new hashmap<>();

    @override
    public void register(string name, department department) {
        map.put(name, department);
    }

    @override
    public void command(string something) {
        map.get(something).dosomething();
    }
}

  

public class client {
    public static void main(string[] args) {
        //中介者
        mediator manager = new manager();
        //各部门对象,中介者需要对接到具体对象
        department devop = new development(manager);
        department finaical = new finacialdepartment(manager);
    
        devop.dosomething();
        //通过向中介者发出申请,间接完成具体对象的调用
        devop.apply();
    }
}

  这个简单例子中,通过中介者manager使各部门交互关系解耦,每个对象持有中介者对象引用,只跟中介者对象打交道。

简化了对象之间的关系,将系统的各个对象之间的相互关系进行封装,将各个同事类解耦,使得系统变为松耦合。

当在业务处理中需要协调多个对象的关系,而又不需要去增加子类方法处理时可以考虑该模式。