java设计模式之中介者模式

一、定义与类型:

》定义一个封装一组对象如何交互的对象

》通过使对象明确地相互引用来促进松散耦合,并允许独立地改变它们的交互;

》类型:行为型

二、适用场景:

》系统中对象之间存在复杂的引用关系,产生的相互依赖关系结构混乱难以理解;

》交互的公共行为,如果需要改变行为则可以增加新的中介者类。

通常用于聊天室等

三、优点:

》将一对多转化成了一对一、降低程序复杂度

》类之间解耦

四、缺点:

》中介者过多,导致系统复杂

五、中介者模式相关设计模式:

》中介者模式和观察者模式:观察者模式用来实现中介者模式之间的通信。

六、代码实践:

场景:所有的课程都有一个学习群,每个群里,小伙伴可以在其中交流。

studyGroup会在群里显示不同小伙伴发言,

package pattern.behaviral.mediator;

/**
 * Created by Administrator on 2019/8/31.
 */
public class User {
    private String name;

    public User(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    public void sendMessage(String message){
        StudyGroup.showMessage(this,message);
    }
}
package pattern.behaviral.mediator;

import java.util.Date;

/**
 * Created by Administrator on 2019/8/31.
 */
public class StudyGroup {
    public static void showMessage(User user,String message){
        System.out.println(new Date().toString()+"["+user.getName()+"]"+message);
    }
}
package pattern.behaviral.mediator;

import javax.jws.soap.SOAPBinding;

/**
 * Created by Administrator on 2019/8/31.
 */
public class Test {
    public static void main(String[] args) {
        User geely = new User("Geely");
        User tom = new User("Tom");

        geely.sendMessage("Hey,Tom! Let's study design ");
        tom.sendMessage("ok! Geely");
    }
}
"D:\Program Files\Java\jdk1.8.0_102\bin\java" "-javaagent:D:\InteliijIDea\IntelliJ IDEA 2017.1.4\lib\idea_rt.jar=58132:D:\InteliijIDea\IntelliJ IDEA 2017.1.4\bin" -Dfile.encoding=UTF-8 -classpath "D:\Program Files\Java\jdk1.8.0_102\jre\lib\charsets.jar;D:\Program Files\Java\jdk1.8.0_102\jre\lib\deploy.jar;D:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\access-bridge-64.jar;D:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\cldrdata.jar;D:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\dnsns.jar;D:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\jaccess.jar;D:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\jfxrt.jar;D:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\localedata.jar;D:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\nashorn.jar;D:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\sunec.jar;D:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\sunjce_provider.jar;D:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\sunmscapi.jar;D:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\sunpkcs11.jar;D:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\zipfs.jar;D:\Program Files\Java\jdk1.8.0_102\jre\lib\javaws.jar;D:\Program Files\Java\jdk1.8.0_102\jre\lib\jce.jar;D:\Program Files\Java\jdk1.8.0_102\jre\lib\jfr.jar;D:\Program Files\Java\jdk1.8.0_102\jre\lib\jfxswt.jar;D:\Program Files\Java\jdk1.8.0_102\jre\lib\jsse.jar;D:\Program Files\Java\jdk1.8.0_102\jre\lib\management-agent.jar;D:\Program Files\Java\jdk1.8.0_102\jre\lib\plugin.jar;D:\Program Files\Java\jdk1.8.0_102\jre\lib\resources.jar;D:\Program Files\Java\jdk1.8.0_102\jre\lib\rt.jar;E:\JavaDesignMode\target\classes" pattern.behaviral.mediator.Test
Sat Aug 31 23:54:29 CST 2019[Geely]Hey,Tom! Let's study design 
Sat Aug 31 23:54:29 CST 2019[Tom]ok! Geely

Process finished with exit code 0

七、中介者模式源码解读:

》jdk中的Timer  计时器中有涉及。schedule方法的使用,最后调用的都是sched(0方法

sched()中的参数为TimerTask,里面是不同的待执行的任务,使用到了queue,其中的Queue 是个taskqueue类型。

Timer就是个中介者,timerTasK就是个被协调的任务

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值