美文网首页
23种设计模式之中介者模式

23种设计模式之中介者模式

作者: 阿跳爱学习 | 来源:发表于2019-01-22 19:19 被阅读0次

优点:简化了对象之间的关系,将对象相互关系封装,统一管理对象相互关系,实现系统松耦合。
缺点:由于将对象相互关系封装,中介者一般相对复杂,使得系统维护相对困难。

主要用于网状结构转换成星型结构: image.png

模式关系图:


image.png
角色作用:
  • 抽象中介者(Mediator)角色:它是中介者的接口,提供了同事对象注册与转发同事对象信息的抽象方法。

  • 具体中介者(ConcreteMediator)角色:实现中介者接口,定义一个 List 来管理同事对象,协调各个同事角色之间的交互关系,因此它依赖于同事角色。

  • 抽象同事类(Colleague)角色:定义同事类的接口,保存中介者对象,提供同事对象交互的抽象方法,实现所有相互影响的同事类的公共功能。

  • 具体同事类(Concrete Colleague)角色:是抽象同事类的实现者,当需要与其他同事对象交互时,由中介者对象负责后续的交互。

例子:模拟一个中介卖房的例子,从简。
抽象同事类(Colleague)角色:

/**
 * 这是一个抽象同事类
 */

public interface Colleague {
    void selfAction();
    void outAction();
}

抽象中介者(Mediator)角色:

/**
 * 这是一个中介接口
 * 抽象中介类,定义了同事对象到中介者对象的接口
 */

public interface Mediator {
    void registered(String name,Colleague colleague);
    void command(String name);
}

具体中介者(ConcreteMediator)角色:

import java.util.Map;

/**
 * 这是一个具体中介者类
 */

public class ConcreteMediator implements Mediator {

    private Map<String, Colleague> map = new HashMap<String, Colleague>();

    @Override
    public void registered(String name, Colleague colleague) {
        map.put(name, colleague);
    }

    @Override
    public void command(String name) {
        map.get(name).selfAction();
        map.get(name).outAction();
    }
}

具体同事类(Concrete Colleague)角色:

import android.util.Log;

/**
 * 这是一个具体同事类
 * 买房者
 */

public class Buyer implements Colleague {

    private Mediator mediator;

    public Buyer(Mediator mediator) {
        this.mediator = mediator;
        mediator.registered("Buyer", this);
    }

    @Override
    public void selfAction() {
        Log.d("TAG", "Buyer selfAction!");
    }

    @Override
    public void outAction() {
        Log.d("TAG", "我要买一套房子!");
        //通过中介者寻找到卖房者
        mediator.command("Seller");
    }
}
import android.util.Log;

/**
 * 这是一个具体同事类
 * 卖房者
 */

public class Seller implements Colleague {

    private Mediator mediator;

    public Seller(Mediator mediator) {
        this.mediator = mediator;
        mediator.registered("Seller", this);
    }

    @Override
    public void selfAction() {
        Log.d("TAG", "Seller selfAction!");
    }

    @Override
    public void outAction() {
        Log.d("TAG", "春天小区一套120平米房子,100万!");
    }
}

调用:

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.FragmentActivity;

/**
 * 这是调用者
 */

public class MainActivity extends FragmentActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Mediator mediator = new ConcreteMediator();
        Seller seller = new Seller(mediator);

        Buyer buyer = new Buyer(mediator);
        buyer.selfAction();
        buyer.outAction();
    }
}
结果: image.png

已完成测试!有不对的地方欢迎指出,感恩。

相关文章

网友评论

      本文标题:23种设计模式之中介者模式

      本文链接:https://www.haomeiwen.com/subject/xlkzdqtx.html