设计模式——中介模式

一、什么是中介模式?


中介即Mediator,用中介对象来讲交互的几个对象进行封装,对象间不再直接进行通讯,而是通过中介间接沟通,降低了对象之间的耦合程度。当对象之间进行复杂的交互,对象之间的依赖混乱,这个时候就可以使用中介模式。


二、中介模式框图


使用中介模式的一个典型的场景是相亲。以前的相亲涉及到了男女两方及互相的父母,如果男方想向女方提出约会的请求,这个时候男方得先问下父母,然后告诉女方,女方要问过父母及自身的意见后再决定要不要和男方约会。女方想和男方约会也要遵循这样的一种模式。


这个模式其实问题很多,简单的一次约会请求就涉及到了各种对象,对象之间的关系太过复杂,这会在以后的使用中带来非常多的不便。


那么我们来应用下中介模式,中介在此案例中就是媒婆。应用了媒婆以后,如果男方想和女方约会,只需要告诉媒婆自己的诉求,然后媒婆会负责之后所有的事情。我们来看下应用中介模式的相亲类图:



 

三、中介模式的具体代码


3.1 Man类,男方相亲对象,内部含有中介Mediator的引用,在构造方法时要向中介“注册”自己

package designpatterns.mediator;

/**
 * Created by Olive on 2017/12/12.
 */
public class Man {

    private Mediator mediator;

    public Man(Mediator mediator){
        this.mediator = mediator;
        // 调用中介者的方法,将对象进行注册
        mediator.registerMan(this);
    }

    /**
    * 对女方发出约会请求
    */
    public void tryDating(String message){
        System.out.println("小姐姐!" + message);
        System.out.println("************************************");
        // 实际调用中介的方法向女方请求约会
        mediator.askWomanForDating(message);
    }

    /**
    * 思考女方的约会请求
    */
    public boolean thinking(String message){
        System.out.println("让我想一想...");
        System.out.println("************************************");
        if(message.length() > 10){
            System.out.println("约约约!");
            System.out.println("************************************");
            return true;
        } else {
            System.out.println("丑拒!");
            System.out.println("************************************");
            return false;
        }
    }
}

3.2 ManParents类,男方父母

package designpatterns.mediator;

/**
 * Created by Olive on 2017/12/12.
 */
public class ManParents {

    private Mediator mediator;

    public ManParents(Mediator mediator){
        this.mediator = mediator;
        // 调用中介者的方法,将对象进行注册
        mediator.registerManParents(this);
    }

    public boolean thinking(String message){
        System.out.println("应不应该让我儿子和那个姑娘约会呢...");
        System.out.println("************************************");
        if(message.length() > 10){
            System.out.println("姑娘眉清目秀,先见见吧!");
            System.out.println("************************************");
            return true;
        } else {
            System.out.println("丑拒!");
            System.out.println("************************************");
            return false;
        }
    }
}

3.3 Woman类,女方相亲对象

package designpatterns.mediator;

/**
 * Created by Olive on 2017/12/12.
 */
public class Woman {

    private Mediator mediator;

    public Woman(Mediator mediator){
        this.mediator = mediator;
        // 调用中介者的方法,将对象进行注册
        mediator.registerWoman(this);
    }

    public void tryDating(String message){
        System.out.println("欧巴!" + message);
        // 实际调用中介的方法向女方请求约会
        mediator.askManForDating(message);
    }

    public boolean thinking(String message){
        System.out.println("让人家想一想嘛...");
        System.out.println("************************************");
        if(message.length() > 10){
            System.out.println("他好帅啊!我也好想和他约会!");
            System.out.println("************************************");
            return true;
        } else {
            System.out.println("丑拒!");
            System.out.println("************************************");
            return false;
        }
    }
}

3.4 WomanParents类,女方父母

package designpatterns.mediator;

/**
 * Created by Olive on 2017/12/12.
 */
public class WomanParents {

    private Mediator mediator;

    public WomanParents(Mediator mediator){
        this.mediator = mediator;
        // 调用中介者的方法,将对象进行注册
        mediator.registerWomanParents(this);
    }

    public boolean thinking(String message){
        System.out.println("应不应该让我女儿和那个小子约会呢...");
        System.out.println("************************************");
        if(message.length() > 10){
            System.out.println("小伙子很像韩国欧巴诶!先见见!");
            System.out.println("************************************");
            return true;
        } else {
            System.out.println("丑拒!");
            System.out.println("************************************");
            return false;
        }
    }
}

3.5 Mediator类,中介类,内部有男女方及其父母类的引用,负责男女两方的沟通

package designpatterns.mediator;

/**
 * Created by Olive on 2017/12/12.
 */
public class Mediator {

    private Man man;
    private ManParents manParents;
    private Woman woman;
    private WomanParents womanParents;

    public void askWomanForDating(String message){
        System.out.println("小伙子别猴急!我先问问女方和你父母");
        System.out.println("************************************");
        // 传递男方的约会请求给女方,媒人要看男方父母,女方父母和女方同不同意
        manParents.thinking(message);
        womanParents.thinking(message);
        woman.thinking(message);
    }

    public void askManForDating(String message){
        System.out.println("小姑娘矜持点!先让我问问男方和两方父母");
        // 女方想与男方约会,要问下女方父母,男方父母,男方同不同意
        womanParents.thinking(message);
        manParents.thinking(message);
        man.thinking(message);
    }

    /*
    * 媒人注册客户,媒人的客户分别有男方及其父母,女方及其父母
    * 媒人直接负责男女两方的沟通
    * */
    public void registerMan(Man man){
        this.man = man;
    }

    public void registerManParents(ManParents manParents){
        this.manParents = manParents;
    }

    public void registerWoman(Woman woman){
        this.woman = woman;
    }

    public void registerWomanParents(WomanParents womanParents){
        this.womanParents = womanParents;
    }
}

3.6 BlindDate类, 相亲测试类

package designpatterns.mediator;

/**
 * Created by Olive on 2017/12/12.
 */
public class BlindDate {

    public static void main(String[] args){

        Mediator mediator = new Mediator();
        Man man = new Man(mediator);
        ManParents manParents = new ManParents(mediator);
        Woman woman = new Woman(mediator);
        WomanParents womanParents = new WomanParents(mediator);

        man.tryDating("我想和那个美腻的小姐姐约会~");


    }
}

3.7 运行结果

小姐姐!我想和那个美腻的小姐姐约会~
************************************
小伙子别猴急!我先问问女方和你父母
************************************
应不应该让我儿子和那个姑娘约会呢...
************************************
姑娘眉清目秀,先见见吧!
************************************
应不应该让我女儿和那个小子约会呢...
************************************
小伙子很像韩国欧巴诶!先见见!
************************************
让人家想一想嘛...
************************************
他好帅啊!我也好想和他约会!
************************************

Process finished with exit code 0

3.8 结论


这是个看脸的世界XD

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值