博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java_中介者模式
阅读量:2501 次
发布时间:2019-05-11

本文共 3259 字,大约阅读时间需要 10 分钟。

文章目录

前言

  最近小咸儿又开始和小伙伴们一起学习设计模式了,这次的学习其实是建立在之前的几次学习之上的,所以很多内容理解起来更加的快速和深入了,所以小咸儿先来总结一波儿~~


叙述

宝图

在这里插入图片描述

定义

  使用中介者模式来集中相关对象之间复杂的沟通和控制方式。也就是说:用一个中介者对象来封装一系列对象的交互,从而达到使对象之间松耦合的效果。

优点

  • 通过将对象彼此解耦,可以增加对象的复用性
  • 通过将控制逻辑集中,可以简化系统维护
  • 可以让对象之间所传递的消息变得简单而且大幅减少

用途和缺点

  • 中介者尝尝被用来协调相关的GUI组件
  • 中介者模式的缺点是,如果设计不当,中介者对象本身会变得过于复杂

实例

  在实例中,有一个公司,每个同事都和其他的同事直接关联,如果有什么交接工作的话也会自己去直接找他,日久天长之后,发现每个人需要负责联系的人都太多了,而且很容易负责的工作都搞不清,无法进行正常的交接。这个时候中介者出现了,同事们不在关心,我需要和谁进行交接,直接关心中介者就好了,我说的话,做的事情,中介者会负责帮我传递的,这样大家就职责清晰了。接下来就是具体的代码实现:

代码实现

  Mediator:中介者定义一个接口用于与各个同事对象(Colleague)通信

package pattern.builder.mediator;/** * 定义抽象Mediator,可以与同事们进行联络 * @author Phyllis * @date 2019年6月30日17:05:00 */public abstract class Mediator {
/** * 转达通信 * @param content 通信内容 * @param coll 谁传达的 */ public abstract void contact(String content, Colleague coll);}

  ConcreteMediator:具体中介者通过协调各个同事对象实现协作行为,了解并维护它的各个同事

package pattern.builder.mediator;/** * 具体中介者类 * @author Phyllis * @date 2019年6月30日17:32:08 */public class ConcreteMediator extends Mediator{
ColleagueA collA; ColleagueB collB; public ColleagueA getCollA(){
return collA; } public void setCollA(ColleagueA collA) {
this.collA = collA; } public ColleagueB getCollB() {
return collB; } public void setCollB(ColleagueB collB) {
this.collB = collB; } @Override public void contact(String content, Colleague coll) {
if (coll == collA){
collB.getMessage(content); }else {
collA.getMessage(content); } }}

  ConcreteMediator:抽象同事类

package pattern.builder.mediator;/** * 定义抽象同事类 * @author Phyllis * @date 2019年6月30日17:06:28 */public abstract class Colleague {
protected String name; protected Mediator mediator; public Colleague(String name, Mediator mediator){
this.name = name; this.mediator = mediator; }}

  ConcreteMediator:具体同事类。每个具体同事类都只需要知道自己的行为即可,但是都需要认识中介者

  • 具体同事A:
package pattern.builder.mediator;/** * 具体同事A * @author Phyllis * @date 2019年6月30日17:09:13 */public class ColleagueA extends Colleague{
/** * 具体同事类继承自Colleague,此刻就可以与中介者mediator进行通信了 * @param name 姓名 * @param mediator 中介者 */ public ColleagueA(String name, Mediator mediator){
super(name,mediator); } public void getMessage(String message){
System.out.println("同事A"+name+"获得信息:"+message); } /** * 同事A与中介者通信 * @param message 通信内容 */ public void contact(String message){
mediator.contact(message,this); }}
  • 具体同事B:
package pattern.builder.mediator;/** * 具体同事B * @author Phyllis * @date 2019年6月30日17:15:54 */public class ColleagueB extends Colleague{
/** * 具体同事类继承自Colleague,此刻就可以与中介者mediator进行通信了 * @param name 姓名 * @param mediator 中介者 */ public ColleagueB(String name, Mediator mediator){
super(name,mediator); } public void getMessage(String message){
System.out.println("同事B"+name+"获得信息:"+message); } /** * 同事B与中介者通信 * @param message 信息 */ public void contact(String message){
mediator.contact(message,this); }}

总结

  中介者模式其实就是找了一个中间人,大家都不互相联系了,直接和中间人联系,做什么事情也让他代为传达,以达到解耦的目的,但是在日常使用起来还是有很多需要注意的地方,一不小心这个中间人就会过于复杂。

感谢您的阅读~~

转载地址:http://cjerb.baihongyu.com/

你可能感兴趣的文章
[转]解读ASP.NET 5 & MVC6系列(7):依赖注入
查看>>
[转]Asp.Net大型项目实践(11)-基于MVC Action粒度的权限管理【续】【源码在这里】(在线demo,全部源码)...
查看>>
[转]VS2010中的单元测试
查看>>
前端面试每日 3+1(每日三问)
查看>>
HC-05底层驱动
查看>>
Ruby on Rails Tutorial 第六章 用户模型
查看>>
Flex与Javascript交互
查看>>
构建之法阅读笔记03
查看>>
IOS https抓包及10.3.3版本证书不生效问题解决
查看>>
Tyvj 1921 Freda的烦恼
查看>>
SQL Server代理的阶梯 - 第2级:作业步骤和子系列
查看>>
jsoup测试例子
查看>>
Datatable/Dataset 转 JSON方法
查看>>
微信公众平台开发接口PHP SDK完整版
查看>>
tiny4412--linux驱动学习(2)
查看>>
MySQL的安装及使用教程
查看>>
iOS开发UI篇—使用xib自定义UItableviewcell实现一个简单的团购应用界面布局
查看>>
KMP算法
查看>>
mutli-lane情况
查看>>
有意思的故事
查看>>