Java-马士兵设计模式学习笔记-观察者模式-OOD 封装Listener

摘要:
一个好方法是封装监听器类,并使用addListener()方法动态添加监听器2。代码1。测验Java语言

 一、概述

childe类中的是关联监听者dad的,若要再增加监听者,会很不方便,且要修改代码。好的方法是封装监听者类,用addListener()方法动态添加监听者

二、代码

1.Test.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
classWakenUpEvent{
     
    privatelongtime;
    privateString location;
    privateChild source;
     
    publicWakenUpEvent(longtime, String location, Child source) {
        super();
        this.time = time;
        this.location = location;
        this.source = source;
    }
 
    publiclonggetTime() {
        returntime;
    }
 
    publicvoidsetTime(longtime) {
        this.time = time;
    }
 
    publicString getLocation() {
        returnlocation;
    }
 
    publicvoidsetLocation(String location) {
        this.location = location;
    }
 
    publicChild getSource() {
        returnsource;
    }
 
    publicvoidsetSource(Child source) {
        this.source = source;
    }
     
     
}
 
classChild implementsRunnable {
     
    privateList<WakenUpListener> wakenUpListeners = newArrayList<WakenUpListener>();
     
    publicvoidaddWakenUpListener(WakenUpListener wul){
        wakenUpListeners.add(wul);
    }
    publicvoidwakeUp(){
        for(inti = 0; i < wakenUpListeners.size(); i++){
            WakenUpListener l = wakenUpListeners.get(i);
            l.actionToWakenUp(newWakenUpEvent(System.currentTimeMillis(), "bed", this));
        }
    }
 
    @Override
    publicvoidrun() {
        try{
            Thread.sleep(3000);
        } catch(Exception e) {
            e.printStackTrace();
        }
        wakeUp();
    }
}
 
 
interfaceWakenUpListener {
    publicvoidactionToWakenUp(WakenUpEvent e);
}
 
classDad implementsWakenUpListener {
 
    publicvoidactionToWakenUp(WakenUpEvent e) {
        System.out.println("Fedd the child");
    }
     
}
 
classGrandFather implementsWakenUpListener {
 
    publicvoidactionToWakenUp(WakenUpEvent e) {
        System.out.println("抱孩子");
    }
     
}
 
 
publicclassTest {
 
    publicstaticvoidmain(String[] args) {
        Child c = newChild();
        c.addWakenUpListener(newDad());
        c.addWakenUpListener(newGrandFather());
        newThread(c).start();
    }
}

  

三、运行结果

Java-马士兵设计模式学习笔记-观察者模式-OOD 封装Listener第1张

免责声明:文章转载自《Java-马士兵设计模式学习笔记-观察者模式-OOD 封装Listener》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇flash 拾遗Linux下杀掉所有得java进程下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

设计模式--观察者模式初探和java Observable模式

初步认识观察者模式  观察者模式又称为发布/订阅(Publish/Subscribe)模式,因此我们可以用报纸期刊的订阅来形象的说明:     报社方负责出版报纸.     你订阅了该报社的报纸,那么只要报社发布了新报纸,就会通知你,或发到你手上.     如果你不想再读报纸,可以取消订阅,这样,报社发布了新报纸就不会再通知你.   理解其实以上的概念,就...

写给小白的RxJava教程(一)

 简介:大三学生党一枚!主攻Android开发,对于Web和后端均有了解。 个人语录:取乎其上,得乎其中,取乎其中,得乎其下,以顶级态度写好一篇的博客。 RxJava教程 (一) 一.RxJava简单介绍 二.RxJava的理解 2.1 上下游的比喻 2.2 浅观设计模式 三.RxJava基础知识 3.1 ObservableEmitter...

不知道怎么提高代码可扩展性?来看看优秀框架源码中的这几种设计模式吧!

为什么要提高代码扩展性 我们写的代码都是为了一定的需求服务的,但是这些需求并不是一成不变的,当需求变更了,如果我们代码的扩展性很好,我们可能只需要简单的添加或者删除模块就行了,如果扩展性不好,可能所有代码都需要重写,那就是一场灾难了,所以提高代码的扩展性是势在必行的。怎样才算有好的扩展性呢?好的扩展性应该具备以下特征: 需求变更时,代码不需要重写。 局部...

Run Loop

学习过程中,将Threading PG中的Run Loops翻译了下,权当是做为笔记。原文见 Run Loops。 20110526 转载请注明,谢谢。 http://www.cnblogs.com/scorpiozj/ Run loops是线程的基础架构部分。一个run loop就是一个事件处理循环,用来不停的调配工作以及处理输入事件。使用run loo...

RxJava入门

项目小版本上线,抽空简单学习了下久仰大名的RxJava 一、引入 个人觉得rxjava的特点: 强大灵活的事件流处理(多线程/多事件/复合对象) 强大灵活优雅简洁的异步 链式调用 可自动Lambda化   实现:RxJava 是通过一种扩展的观察者模式来实现的 类比 类比 实际 实际 职责 演讲者 Button (可)被订阅者 (同右)...

马士兵java视频学习顺序

第一部分:J2se学习视频内容包括: 尚学堂科技_马士兵_JAVA视频教程_JDK5.0_下载-安装-配置 尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第01章_JAVA简介_源代码_及重要说明 尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第02章_递归补充 尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第02章_基础语法...