设计模式——中介模式
来源:互联网 发布:超级基因优化液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
阅读全文
0 0
- 设计模式——中介者模式
- 设计模式——中介模式
- 设计模式——中介者模式
- 设计模式——中介者模式
- 设计模式——中介者模式
- 设计模式——中介者模式
- 设计模式——中介模式
- 设计模式——中介模式
- 设计模式—Mediator中介者模式
- 大话设计模式—中介者模式
- Java设计模式—中介者模式
- 设计模式——中介者
- 设计模式学习—Mediator(中介者)
- 大话设计—中介者模式
- 设计模式 - 中介模式
- 设计模式——中介者设计模式
- 设计模式之——中介者设计模式
- 设计模式之五——中介者模式
- 万亿级数据洪峰下的分布式消息引擎
- C#网络编程系列文章(四)之TcpListener实现同步TCP服务器
- Docker 启动中失败解决
- 欢迎使用CSDN-markdown编辑器
- Android源码编译make的各类错误解决方案汇总
- 设计模式——中介模式
- 欢迎使用CSDN-markdown编辑器
- Swift 自定义 UIDatePicker
- iOS 导航栏 搜索
- (原创)设置APP内的字体
- 那些年犯过的错:在main方法之前,到底执行了什么?
- Docker1— 从入门到实践
- 数字转化成对应的汉字
- C#网络编程系列文章(五)之Socket实现异步UDP服务器