Java设计模式-中介者模式(Mediator)


一、中介者模式

用一个中介对象来封装一系列的对象交互。中介者使各个对象业务之间不显示的相互调用,从而使其耦合松散,而且可以独立地改变他们之间的交互。

二、中介者模式示例代码

以房产中介为例,如果没有房产中介,购房需要客户到各个楼盘进行咨询房子的信息,房产中介可以为顾客提供所有楼盘的信息。

1.定义抽象中介类

/**
 * 房产中介
 */
public abstract class HouseMediator {

    public abstract void sendHouseInfo(String houseInfo);
}

2.具体的抽象中介实现类

代码如下:


public class HouseMediatorA extends HouseMediator{
    @Override
    public void sendHouseInfo(String houseInfo) {
        System.out.println("HouseMediatorA:"+houseInfo);
    }
}

3.定义具体类

package behavior.Mediator;

/**
 * 楼盘信息
 */
public class CommercialBuilding {
    private String houseDesc;
    private String housePrice;
    private String houseAddr;

    private HouseMediator houseMediator;

    public CommercialBuilding(String houseDesc, String housePrice, String houseAddr,HouseMediator houseMediator) {
        this.houseDesc = houseDesc;
        this.housePrice = housePrice;
        this.houseAddr = houseAddr;
        this.houseMediator = houseMediator;
    }

    public String getHouseDesc() {
        return houseDesc;
    }

    public void setHouseDesc(String houseDesc) {
        this.houseDesc = houseDesc;
    }

    public String getHousePrice() {
        return housePrice;
    }

    public void setHousePrice(String housePrice) {
        this.housePrice = housePrice;
    }

    public String getHouseAddr() {
        return houseAddr;
    }

    public void setHouseAddr(String houseAddr) {
        this.houseAddr = houseAddr;
    }

    /**
     * 发布房产信息
     *
     */
    public void sendHouseInfo(){
        String houseInfo  = "CommercialBuilding[" +
                "houseDesc='" + houseDesc + '\'' +
                ", housePrice='" + housePrice + '\'' +
                ", houseAddr='" + houseAddr + '\'' +
                ']';
        houseMediator.sendHouseInfo(houseInfo);
    }



}

4.测试

public class MediatorDemo {
    public static void main(String[] args) {
        CommercialBuilding commercialBuilding = new CommercialBuilding("A","9000/m^2","北京路",new HouseMediatorA());
        commercialBuilding.sendHouseInfo();

        commercialBuilding = new CommercialBuilding("B","10000/m^2","上海路",new HouseMediatorA());
        commercialBuilding.sendHouseInfo();
    }
}

打印:

HouseMediatorA:CommercialBuilding[houseDesc='A', housePrice='9000/m^2', houseAddr='北京路']
HouseMediatorA:CommercialBuilding[houseDesc='B', housePrice='10000/m^2', houseAddr='上海路']

总结

抽象中介者(Mediator)角色:抽象中介者角色定义统一的接口用于各同事角色之间的通信。具体中介者(Concrete Mediator)角色:具体中介者角色通过协调各同事角色实现协作行为,因此它必须依赖于各个同事角色。同事(Colleague)角色:每一个同事角色都知道中介者角色,而且与其他的同事角色通信的时候,一定要通过中介者角色协作。每个同事类的行为分为两种:一种是同事本身的行为,比如改变对象本身的状态,处理自己的行为等等,这种方法叫做自发行为(Self-Method),与其他的同事类或中介者没有任何的依赖;第二种是是必须依赖中介者才能完成的行为,叫做依赖方法(Dep-Method)。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小刘同学要加油呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值