Java 中介者模式

中介者模式本质:

      解耦各个同事对象之间的交互关系,每个对象都持有中介对象的引用,只跟中介者对象打交道,我们通过中介者对象来统一管理这些交互关系。(同事对象是指在系统中,如果对象之间的联系呈网状结构,对象之间存在大量多对多的关系,我们称之为同事对象)

中介者模式优点:

      1.降低了类的复杂度,将一对多,转化称为了一对一。

       2.符合迪米特法则(一个对象应当对其它对象保持最少的了解)。

中介者模式缺点:
       1.中介者会变得越来越臃肿,庞大。

中介者模式角色:

       1.抽象同事角色:它可能是一个抽象类或者一个接口,它抽象出同事角色的业务行为。

        2.具体同事角色:它实现了抽象同事角色的方法,具体化抽象同事角色的业务行为。

        3.抽象中介者角色:它可能是一个抽象类或者接口,它抽象出中介者的业务行为。

        4.具体中介者角色:它实现了抽象中介者角色的方法,具体化抽象中介者角色的业务行为。

下面我们以租房者,中介者,房东为例,带你了解中介者模式:

 

      

/**
 *抽象同事角色
 * Created by  Administrator
 */

public interface BuyerAndSeller {
    public void selfAction();
    public void getAction();
}

 

/**
 *具体同事角色(租房者)
 * Created by  Administrator
 */
public class Tenant implements BuyerAndSeller {

    private  Mediator mediator;

    public Tenant(Mediator mediator) {
        this.mediator = mediator;
        this.mediator.register("tenant",Tenant.this);
    }

    @Override
    public void selfAction() {
        Log.d("selfAction","我是租房者,我想租房子");

    }

    @Override
    public void getAction() {
        Log.d("selfAction","我((租房者)不直接找房东,我先找中介,中介找房东");
        mediator.doAction("landlord");
    }
}
/**
 *具体同事角色(房东)
 * Created by  Administrator
 */

public class Landlord implements BuyerAndSeller{
    private  Mediator mediator;

    public Landlord(Mediator mediator) {
        this.mediator = mediator;
        this.mediator.register("landlord",Landlord.this);
    }

    @Override
    public void selfAction() {
        Log.d("selfAction","我是房东,我要把房子租出去");
    }

    @Override
    public void getAction() {
        Log.d("selfAction","我(房东)不直接找住房者,我先找中介,中介找租房者");
        this.mediator.doAction("tenant");
    }
}
/**
 * 抽象的中介者
 * Created by  Administrator
 */

public interface Mediator {
   void register(String name,BuyerAndSeller buyerAndSeller);
   void doAction(String name);
}

 

/**
 *具体中介者角色
 * Created by  Administrator
 */
public class MediatorImpl implements Mediator {

    Map<String,BuyerAndSeller> hashMap=new HashMap<String,BuyerAndSeller>();
    //你们租房者和房东都找我,那就先在我这里注册,然后有需求,我才能找到你们。
    @Override
    public void register(String name, BuyerAndSeller buyerAndSeller) {
        hashMap.put(name,buyerAndSeller);
    }

    @Override
    public void doAction(String name) {
        hashMap.get(name).selfAction();
    }
}

 

//实例化中介者角色(三个角色都是面向接口编程)
Mediator mediator=new MediatorImpl();
//实例化租房者角色
BuyerAndSeller tenant=new Tenant(mediator);
//实例化房东角色
BuyerAndSeller landlord=new Landlord(mediator);

//租房者的动作
tenant.selfAction();
tenant.getAction();

结果:

//房东的动作
landlord.selfAction();
landlord.getAction();

结果:

 


 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值