设计模式——中介者模式16

中介者模式定义一个中介对象来封装其他对象之间的交互,使原有交互对象之间耦合松散。例如房租中介。
设计模式,一定要敲代码理解
在这里插入图片描述

中介者抽象

/**
 * @author ggbond
 * @date 2024年04月14日 16:52
 */
public abstract class Mediator {
    //

    abstract void info(Person p1);
    abstract void add(Person p1);
}

中介者实现

/**
 * @author ggbond
 * @date 2024年04月14日 17:00
 */
public class HouseMediator  extends  Mediator{
    private List<Person> list=new ArrayList<>();

    @Override
    void add(Person p1) {
        if (!list.contains(p1)){
            list.add(p1);
        }
    }

    @Override
    public void info(Person p1) {
        for ( Person item :list){
            if (!p1.equals(item)){
                item.receive();
            }
        }
    }
}

同事实体抽象

/**
 * @author ggbond
 * @date 2024年04月14日 16:55
 */
public abstract class Person {
    private String name;

    public Person(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public abstract  void  send();
    public abstract  void  receive();
}

同事实体实现

public class Person01  extends Person{
    private  Mediator mediator;
    public Person01(String name,Mediator mediator) {
        super(name);
        this.mediator=mediator;
    }

    @Override
    public void send() {
        System.out.println(this.getName()+"发布出租信息");
        this.mediator.info(this);//中介转发
    }

    @Override
    public void receive() {
        System.out.println(this.getName()+"收到其他人发布的出租信息");
    }
}
/**
 * @author ggbond
 * @date 2024年04月14日 16:56
 */
public class Person02 extends Person{
    private  Mediator mediator;
    public Person02(String name, Mediator mediator) {
        super(name);
        this.mediator=mediator;
    }

    @Override
    public void send() {
        System.out.println(this.getName()+"发布出租信息");
        this.mediator.info(this);//中介转发
    }

    @Override
    public void receive() {
        System.out.println(this.getName()+"收到其他人发布的出租信息");
    }
}

测试与结果

/**
 * @author ggbond
 * @date 2024年04月14日 17:09
 */
public class Main {
    public static void main(String[] args) {
        //中介信息
        Mediator mediator=new HouseMediator();

        //组件同事对象
        Person p1=new Person01("ggbond1",mediator);
        Person p2=new Person01("ggbond2",mediator);
        
        mediator.add(p1);
        mediator.add(p2);
        
        p1.send();
        System.out.println("===========");
        p2.receive();

    }
}

ggbond1发布出租信息
ggbond2收到其他人发布的出租信息
===========
ggbond2发布出租信息
ggbond1收到其他人发布的出租信息

总结

中介模式声明中介者接口并描述中介者和各种交互同事对象之间所需的交流接口。 在绝大多数情况下, 一个接收同事通知的方法就足够了。满足单一职责原则,开闭原则,无需修改实际同事对象就能增加新的中介者。

代码下载

代码下载

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值