设计模式——中介模式

来源:互联网 发布:超级基因优化液txt 编辑:程序博客网 时间:2024/05/21 20:11

一、什么是中介模式?


中介即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

原创粉丝点击