谈爱情故事,谈观察者模式
这个世界上的人啊太多了,帅哥也特别的多,正好我同学也算是一个帅哥吧,不过他和别的人可不一样,脾气好,对人好,从不发牢骚,也从不和别人计较。还乐意助人,心胸广阔............这如果从面向对象的思想来看,好象可以进行抽象吧,提取共性(他和别的帅哥都有的特征,如女孩高兴和不高兴的时候,他们该是什么反映?):
2
3import java.util.EventListener;
4
5/** *//**
6 * 事件监听者接口--继承于EventListener
7 * 所有的监听对象都继承于此接口
8 */
9public interface EmotionListener extends EventListener {
10 /** *//**
11 * 当女朋友高兴的时候我将会做什么?
12 * @param e--情感事件(事件对象)
13 */
14 void whatCanIdoWhenGirlHappy(EmotionEvent e);
15
16 /** *//**
17 * 当女朋友不高兴的时候我将会做什么?
18 * @param e--情感事件(事件对象)
19 */
20 void whatCanIdoWhenGirlSad(EmotionEvent e);
21}
2
3import java.util.EventObject;
4
5/** *//**
6 * 情感事件--继承于事件对象(EventObject)
7 * 事件对象
8 */
9public class EmotionEvent extends EventObject {
10 public EmotionEvent(Object source) {
11 super(source);
12 }
13 private static final long serialVersionUID = 1L;
14}
15
2
3/** *//**
4 * 事件监听者--监听对象
5 * 响应事件源(Girl)发起的事件对象(情感事件-EmotionEvent)
6 */
7public class HandSome implements EmotionListener {
8
9 private String name;
10 public String getName() {
11 return name;
12 }
13
14 public void setName(String name) {
15 this.name = name;
16 }
17
18 public HandSome(String name) {
19 super();
20 this.name = name;
21 }
22
23 /** *//**
24 * 当女朋友高兴的时候我将会做什么?
25 * @param e--情感事件(事件对象)
26 */
27 public void whatCanIdoWhenGirlHappy(EmotionEvent e) {
28 Object o = e.getSource();
29 Girl girl = (Girl)o;
30 System.out.print(name + "说:" + girl.getName());
31 System.out.println(",你高兴, 我也很高兴!!!");
32 }
33
34 /** *//**
35 * 当女朋友不高兴的时候我将会做什么?
36 * @param e--情感事件(事件对象)
37 */
38 public void whatCanIdoWhenGirlSad(EmotionEvent e) {
39 Object o = e.getSource();
40 Girl girl = (Girl)o;
41 //
42 System.out.print(name + "说:" + girl.getName());
43 System.out.print(",你不高兴, 我也会不高兴的。");
44 System.out.println("宝贝,甭怕,你不高兴的时候我会逗你开心的。");
45 }
46}
在上面一直提到的还有个美女怎么没看到(张三的“宝贝”),那我们来看看这个大美女到底长什么样,把我们张三都给迷倒了。
2
3import java.util.ArrayList;
4import java.util.List;
5
6/** *//**
7 *事件发起者--事件源
8 */
9public class Girl {
10
11 public Girl(String name) {
12 super();
13 this.name = name;
14 }
15 private String name;
16 public String getName() {
17 return name;
18 }
19
20 List<EmotionListener> boyFriends=new ArrayList<EmotionListener>();
21}
2* 女孩找到男朋友了---是谁?张三吗?还是李四?
3* @param listener--事件监听对象
4*/
5public void addEmotionListener(EmotionListener listener){
6 this.boyFriends.add(listener);
7 HandSome hs=(HandSome)listener;
8 System.out.println(name+"说:好高兴,我找到男朋友了,他叫:" + hs.getName() + ".");
9}
10
11/** *//**
12* 女孩失恋了.
13* @param listener
14*/
15public void removeEmotionListener(EmotionListener listener){
16 this.boyFriends.remove(listener);
17 HandSome hs=(HandSome)listener;
18 System.out.println(name+" 说:亲爱的" + hs.getName() + ",我不能没有你,请不要离开我!!");
19}
2//女孩自己就是事件发起者,也就是事件源
3 EmotionEvent e = new EmotionEvent(this);
4 for ( EmotionListener lis : boyFriends) {
5 lis.whatCanIdoWhenGirlHappy( e );
6 lis.whatCanIdoWhenGirlSad( e );
7 }
8}
1package DesignPattern.Observer;
2
3import java.util.ArrayList;
4import java.util.List;
5
6/** *//**
7 *事件发起者--事件源
8 */
9public class Girl {
10
11 public Girl(String name) {
12 super();
13 this.name = name;
14 }
15 private String name;
16 public String getName() {
17 return name;
18 }
19
20 List<EmotionListener> boyFriends=new ArrayList<EmotionListener>();
21
22 /** *//**
23 * 女孩找到男朋友了---是谁?张三吗?还是李四?
24 * @param listener--事件监听对象
25 */
26 public void addEmotionListener(EmotionListener listener){
27 this.boyFriends.add(listener);
28 HandSome hs=(HandSome)listener;
29 System.out.println(name+"说:好高兴,我找到男朋友了,他叫:" + hs.getName() + ".");
30 }
31
32 /** *//**
33 * 女孩失恋了.
34 * @param listener
35 */
36 public void removeEmotionListener(EmotionListener listener){
37 this.boyFriends.remove(listener);
38 HandSome hs=(HandSome)listener;
39 System.out.println(name+" 说:亲爱的" + hs.getName() + ",我不能没有你,请不要离开我!!");
40 }
41
42 public void fire() {
43 //女孩自己就是事件发起者,也就是事件源
44 EmotionEvent e = new EmotionEvent(this);
45 for ( EmotionListener lis : boyFriends) {
46 lis.whatCanIdoWhenGirlHappy( e );
47 lis.whatCanIdoWhenGirlSad( e );
48 }
49 }
50}
51
2 public static void main(String[] args) {
3
4 //创建事件源对象--“宝贝”
5 Girl g = new Girl("宝贝");
6 //创建事件监听对象
7 EmotionListener listener = new HandSome("张三");
8 //将响应者注册到事件源
9 //(将上面创建的帅哥(“张三”)设定为叫“宝贝”的这个美女的男朋友)
10 g.addEmotionListener(listener);
11 g.fire();
12 }
13}
浪漫的事宝贝说:好高兴,我找到男朋友了,他叫:张三.
张三说:宝贝,你高兴, 我也很高兴!!!
张三说:宝贝,你不高兴, 我也会不高兴的。宝贝,甭怕,你不高兴的时候我会逗你开心的。
2 public static void main(String[] args) {
3
4 //创建事件源对象--“宝贝”
5 Girl g = new Girl("宝贝");
6 //创建事件监听对象
7 EmotionListener listener = new HandSome("张三");
8 //将响应者注册到事件源
9 //(将上面创建的帅哥(“张三”)设定为叫“宝贝”的这个美女的男朋友)
10 g.addEmotionListener(listener);
11 //第三者加入
12 EmotionListener lis = new HandSome("周末");
13 g.addEmotionListener(lis);
14 g.fire();
15 }
16}
浪漫的事宝贝说:好高兴,我找到男朋友了,他叫:张三.
宝贝说:好高兴,我找到男朋友了,他叫:周末.
张三说:宝贝,你高兴, 我也很高兴!!!
张三说:宝贝,你不高兴, 我也会不高兴的。宝贝,甭怕,你不高兴的时候我会逗你开心的。
周末说:宝贝,你高兴, 我也很高兴!!!
周末说:宝贝,你不高兴, 我也会不高兴的。宝贝,甭怕,你不高兴的时候我会逗你开心的。
2//或许是应该张三冷落了他才会引起第三者的加入
3//张三很后悔,决定离开了他的"宝贝"
4g.removeEmotionListener(listener);
哎,爱情总是这样,拥有的时候不好好珍惜,直到失去后才后悔莫及,人世间的......宝贝 说:亲爱的张三,我不能没有你,请不要离开我!!
总上所述,其实我们已经演绎了一个面向对象的设计模式--观察者模式,事件模型就是观察者模式的一种体现。本文只是趣味性的简单解说了一下事件模型的实现过程,要深入学习面向对象设计模式请查看相关书籍或资料。
谈爱情故事,谈观察者模式相关推荐
- 很感人的爱情故事——世界上最遥远的距离
很感人的爱情故事--世界上最遥远的距离 他对她一见钟情. 他跟她是大学同届同系不同班的同学,在大一新生报道那天,几千名新生排队等候办理注册,他穿者蓝色格子衬衫,恰巧排在她后方,从那天起他就对她一见钟情 ...
- 互联网大佬爱情故事~
冯绍峰终究跪倒在"女儿国国王"赵丽颖的石榴裙下,"官宣"热度还没减退就听说有着"金童玉女"之称的罗晋和唐嫣也要结婚了,这一波波甜的发酣的狗粮 ...
- 高甜预警!16个滴滴程序员的爱情故事
桔妹导读:一年当中的情人节有很多,有七夕,有2.14,有你的生日,有我们的纪念日,还有520."5.20"这一天是告白的日子,也许是羞涩的初次表白,也许是细水长流中的真情流露,也许 ...
- TCP和UDP的笑话导致的悲剧爱情故事
来源:网络技术平台 网络工程师小明最近交了一个女朋友丽丽,为了在丽丽面前显示自己的风趣幽默,小明讲了个TCP的笑话. 你想听一个TCP的笑话吗? 嗯,我想听一个TCP的笑话. 好的,我会给你讲一个TC ...
- 分享一个程序猿的真实的爱情故事
分享一个程序猿的真实的爱情故事 在今天(农历四月十九日)这个特别的日子里,就不分享技术干货了.因为今天是我老婆的生日,所以我改成记录一下关于我这个"老"程序猿跟我老婆之间的故事.也 ...
- 直面问题,咱谈焦虑、谈烦恼、谈如何成长
前天,看了一场极客时间的直播<直面问题,咱谈焦虑.谈烦恼.谈如何成长>,大名鼎鼎的左耳朵耗子陈皓老师亲自坐镇直播间,主要分享了以下四个问题: 1.技术人员如何面对自己的焦虑烦恼? 2.程序 ...
- DayDayUp:那些年-程序猿的爱情故事
DayDayUp:那些年-程序猿的爱情故事 目录 程序猿们的爱情故事 <光阴的故事> 程序猿们的爱情故事 <光阴的故事> 歌手:罗大佑 歌词: 春天的花开,秋天的风,以及冬天的 ...
- 一个程序员的爱情故事
和她正式认识之前,我见过她三次 第一次是她来公司面试,推门进来,小声对我说,打扰了,我来面试:披肩发齐刘海,灰色的短袖外套,黑裙子.我指了指人事办公区的位置,说人事在那边,接着喊了一句,"小 ...
- 视差滚动的爱情故事之优化篇
上篇博客链接:视差滚动的爱情故事 [优化问题 : 解决Chrome下跳动的bug] 在上一篇的爱(diao)情(si)故事里面,demo3在 Chrome下是这样的问题:鼠标滚动视差元素动画生硬,鬼畜 ...
最新文章
- JUC并发编程四 并发架构--并发之共享模型
- JZOJ 5625. 【NOI2018模拟4.3】Max
- 利用WINDOWS活动目录提供LDAP的方案
- markdown居中文本 - 代码篇
- javascript、jquery获取网页的高度和宽度
- json在java中的使用_在Java中使用JSON
- OpenCV之感兴趣区域ROI
- c语言上机题库大一,C语言上机题库(一).doc
- 分享几款常用的MySQL管理工具
- 皮克定理和任意多边形的面积公式
- 轻量级 android模拟器,【分享中控】轻量级中控系统
- 利用Apache Tika分页解析pdf文件内容
- 测试小兵成长记:柳暗花明又一村
- java实用工具之XOM
- python scipy 计算黎曼ζ函数
- FM860-GI工业级摄像头安装驱动
- 如何创建对电脑屏幕的自动点击的脚本
- LeGo-LOAM激光雷达定位算法源码阅读(二)
- 简单的激光干涉测距仪原理——为什么只能测量相对距离
- 电子商务中计算机网络的应用论文参考文献,计算机网络技术计算机网络论文,关于计算机网络技术应用相关参考文献资料-免费论文范文...
热门文章
- 看着拆焊过程,很治愈
- 讯飞智慧餐厅(安徽赛区)比赛通知
- 交流线圈磁芯上的短路铜片
- 第十五届全国大学生智能汽车竞赛深度学习组别预选赛提交作品队伍
- StringUtils.join的用法
- python打砖块游戏算法设计分析_python实现打砖块游戏
- java 多级级联菜单回显_详解element-ui级联菜单(城市三级联动菜单)和回显问题...
- 刘道成mysql视频教程_燕十八刘道成Mysql 系列视频教程 Mysql视频教程打包下载
- win10 Linux子系统 交叉编译器注意事项
- python中的方法需要定义_Python中规范定义命名空间的一些建议