设计模式中介者模式(MediatorPattern)

核心模块:抽象中介者、具体中介者、抽象同事类、具体同事类

所有代码请访问:git@code.aliyun.com:289804201/PatternLearn.git

使用场景:双方不直接交流的情况下,进行通信(调用等);
优点:降低耦合性,不需要显示的调用对象,减少系统对象之间的耦合;
缺点:关系过于复杂的话,中介类将异常庞大;
注意:

1,不同于访问者模式,访问者模式有具体的数据元,且访问模式数据元可扩展;


/**
 * Created by tory on 2017/12/11.
 * //中介者模式,
 * 适合两人之间单独联系;不适合群聊
 * 不同与访问者模式,访问者模式有固定的数据元或者流程,
 * 优点,解耦,减少子类:缺点,中介者过于庞大
 */
public class MediatorPattern {
    public static void main(String[] args) {
        HouseMediator mediator = new HouseMediator();
        TenantPerson tenant = new TenantPerson("tory",mediator);
        HousePerson owner = new HousePerson("jay",mediator);
        mediator.setHouseowner(owner);
        mediator.setTenant(tenant);

        tenant.contact("hello");
        owner.contact("do you need house?");
        tenant.contact("yes,i do!!");

    }
}

//Meditor 抽象中介者
abstract class Mediator {
    abstract void contact(String message, Person person);
}

//ConcreteMediator 具体中介者
class HouseMediator extends Mediator {
    //中介者要知道通信的双方,如果关系过大,比如群聊,或者散发性网络,中介者将异常庞大
    TenantPerson tenant;
    HousePerson houseowner;

    public void setTenant(TenantPerson tenant) {
        this.tenant = tenant;
    }

    public void setHouseowner(HousePerson houseowner) {
        this.houseowner = houseowner;
    }


    @Override
    void contact(String message, Person person) {
        //这里实现opc,
        //person 发送者Person 发送的message
        if (person == tenant) {
            houseowner.getMessage(message);
        } else if (houseowner == person) {
            tenant.getMessage(message);
        }
    }
    //房屋中介

}

//Colleague 抽象同事类
abstract class Person {
    String name;
    Mediator mediator;

    Person(String name, Mediator mediator) {
        this.name = name;
        this.mediator = mediator;
    }
}

//ConcreteColleague 具体同事类
class TenantPerson extends Person {
    //承租人
    TenantPerson(String name, Mediator mediator) {
        super(name, mediator);
    }

    void contact(String message) {
        mediator.contact(message, this);
    }

    void getMessage(String message) {
        System.out.println("Tenant," + name + " receive:" + message);
    }
}

class HousePerson extends Person {
    //房东
    HousePerson(String name, Mediator mediator) {
        super(name, mediator);
    }

    void contact(String message) {
        mediator.contact(message, this);
    }

    void getMessage(String message) {
        System.out.println("HouseOwner," + name + " receive:" + message);
    }
}

内容打印
Hello World!
HouseOwner,jay receive:hello
Tenant,tory receive:do you need house?
HouseOwner,jay receive:yes,i do!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值