设计模式学习之当好一个中介难不难

  中介者模式的定义:      

       中介就是游走于买方和卖方之间的纽带。卖方和买方通过中介来联系,省去了中间的沟通成本,比如房屋中介,卖方要面对多个买方,希望房子卖个不错的价格,而买方也要需要面对多个卖方,房比三家才能找到自己满意和价格适中的房子。如果此一来卖方和买方直接沟通,那沟通成本简直难以想象。而在设计模式中也一种类似中介的模式就是中介者模式。

       中介者模式也称调度者模式,定义为用一个中介对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

中介者模式的实现方式:

     再拿买房和卖方的举例来说,如果卖方和买方直接沟通的话,每个买房和卖方都可以互相联系,于是就形成了一个网状结构,如果更多的卖方和买方参与进来,那么画面可想而知。 

        这是时人就发现了商机。可以收集卖方的房子信息和买方的需求,这样一来,卖方和买方想要做房屋交易就可以来找我,先挑选满意的房子,然后再进一步进行交易。这样一来无论时卖方和买方都能节省不少沟通成本和时间成本。于是中介模式正式出现。

如此一来拓扑关系变得的简单明了,每个卖方和买方都是通过中介进行联系,耦合度降低。那程序该如何设计,首先需要一个中介 Mediator,卖方seller和买方buyer,类图关系如下:

代码实现: 

package com.mediator;

/**
 * 中介者模式
 * 抽象中介类
 */
public abstract class Mediator {
    //买方
    protected BuyerCustomer buyerCustomer;
    //卖方
    protected  SellerCustomer sellerCustomer;
    //提供房子的信息
    public abstract void getInfo();
    //提供想要买房子的信息
    public abstract  void pushInfo();
    //get/set注入
    public BuyerCustomer getBuyerCustomer() {
        return buyerCustomer;
    }

    public void setBuyerCustomer(BuyerCustomer buyerCustomer) {
        this.buyerCustomer = buyerCustomer;
    }

    public SellerCustomer getSellerCustomer() {
        return sellerCustomer;
    }

    public void setSellerCustomer(SellerCustomer sellerCustomer) {
        this.sellerCustomer = sellerCustomer;
    }
}

/**
 * 中介模式
 * 房屋中介
 */
public class ConcreteMediator  extends  Mediator{
    @Override
    public void getInfo() {
        System.out.println("买房获得高大上的房子的信息");
    }

    @Override
    public void pushInfo() {
        System.out.println("卖方得到想买高大上房子的客户");
    }
}

/**
 * 中介模式
 * 抽象顾客类
 */
public abstract class Customer {
    protected   Mediator mediator;
    public Customer(Mediator mediator){
        this.mediator= mediator;
    }
}

package com.mediator;

/**
 * 中介者模式
 * 卖方客户
 */
public class BuyerCustomer  extends Customer{

    //传递给中介
    public BuyerCustomer(Mediator mediator) {
        super(mediator);
    }
    //提供房子的信息
    public void gatheringInfo(){
        System.out.println("想买高大上的房子");
    }
    //获取到想买房子的客户
    public void getSeller(){
        System.out.println("买方从中介那里得知:客户");
        super.mediator.getInfo();
    }
}

package com.mediator;

/**
 * 中介者模式
 * 买方客户
 */
public class BuyerCustomer  extends Customer{

    //传递给中介
    public BuyerCustomer(Mediator mediator) {
        super(mediator);
    }
    //提供房子的信息
    public void gatheringInfo(){
        System.out.println("想买高大上的房子");
    }
    //获取到想买房子的客户
    public void getSeller(){
        System.out.println("买方从中介那里得知:客户");
        super.mediator.getInfo();
    }
}
package com.mediator;

/**
 * 中介模式
 * 测试类
 */
public class Test {
    public static void main(String[] args) {
        //中介
        Mediator mediator = new ConcreteMediator();
        //卖方客户
        SellerCustomer sellerCustomer = new SellerCustomer(mediator);
        //买方
        BuyerCustomer buyerCustomer = new BuyerCustomer(mediator);
        //到中介注信息
        mediator.setBuyerCustomer(buyerCustomer);
        mediator.setSellerCustomer(sellerCustomer);
        sellerCustomer.gatheringInfo();
        buyerCustomer.gatheringInfo();
        //获取交易信息
        sellerCustomer.getBuyer();
        buyerCustomer.getSeller();
    }
}


//测试结果

想卖高大上的房子
想买高大上的房子
卖方从中介那里得知:客户 
想买高大上的房子
买方从中介那里得知:客户
想卖高大上的房子


       从代码实现中可以看出,无论是卖方还是买方只需要和中介建立联系就可以完成各自的需求。 卖方在中介注册卖房子的信息,而买方同样要在中介注册要买房的信息,当卖方需要获取买方信息时通过中介就可以获取,买方也是同样的道理。

中介者模式总结:

  • 优势:解耦,中介者模式最突出的优点就是解耦合,简单化类与类之间的调用关系,将原来的一对多或者多对多,变成一对一的关系。
  • 劣势:同样,因为这种解耦方式的存在,中介者的类会越来越庞大,因为中介者要兼容需要解耦的类的所有方法,意味着解耦类的变动,中介者也有可能会随之变动,逻辑处理会越来越复杂。
  • 适用场景:中介者模式更像是成立一个调度中心,所有的需求都发送到中介者,而所有指令也是由中介者发布。strust的Controller的就是一个很好的例子,将Model和View隔离开,减少了业务和视图的依赖。实际开发中,目前还没有使用到这种场景,中介者模式优势明显,但是劣势也很突出,使用不慎的后果会带来后期维护的种种问题。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值