`
屌丝学Java
  • 浏览: 28414 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

转 java观察者模式

    博客分类:
  • Java
 
阅读更多
观察者模式——顾名思义,就是一个对象观察另一个对象,当被观察的对象发生变化时,观察者也会跟着变化。

在日常中,我们配java环境变量时,设置一个JAVAHOME变量,这就是被观察者,使用了JAVAHOME变量的对象都是观察者,一旦JAVAHOME的路径改动,其他的也会跟着改动。

这样的例子很多,我想用小时候玩的老鹰捉小鸡游戏来简单的描绘观察者模式。

老鹰会变成观察者,母鸡和小鸡是观察者,一旦老鹰的动作发生变动,观察者们也会跟着发生变化




Java代码 
1.package 观察者模式; 
2. 
3./**
4. * 老鹰(被观察者)
5. * 
6. * @Description
7. * @author FuJianyong
8. * 2015-7-6下午04:56:29
9. */ 
10.public class Eagle { 
11.    /**
12.     * 动作 
13.     */ 
14.    public static String action; 
15. 
16.    private String name; 
17.     
18.    public Eagle(String name){ 
19.        this.name = name; 
20.    } 
21.     
22.    public void move(){ 
23.        System.out.println(this.name + action); 
24.    } 
25.     
26.} 




Java代码 
1.package 观察者模式; 
2. 
3./**
4. * 母鸡(观察者)
5. * @Description
6. * @author FuJianyong
7. * 2015-7-6下午04:57:50
8. */ 
9.public class Hen { 
10.     
11.    private String name; 
12.     
13.    public Hen(String name){ 
14.        this.name = name; 
15.    } 
16.     
17.    public void move() { 
18.        if(Eagle.action.equals("飞走了")){ 
19.            System.out.println(this.name + "呱呱叫");           
20.        }else{ 
21.            System.out.println(this.name + Eagle.action); 
22.        } 
23.    }   
24.} 





Java代码 
1.package 观察者模式; 
2. 
3./**
4. * 小鸡
5. * @Description
6. * @author FuJianyong
7. * 2015-7-6下午05:00:25
8. */ 
9.public class Chick{ 
10. 
11.    private String name; 
12.     
13.    public Chick(String name) { 
14.        this.name = name; 
15.         
16.    } 
17.    public void move(){ 
18.        if(Eagle.action.equals("飞走了")){ 
19.            System.out.println(this.name + "唧唧叫");           
20.        }else{ 
21.            System.out.println(this.name + Eagle.action); 
22.        } 
23.    } 
24.} 


测试代码:



Java代码 
1.package 观察者模式; 
2. 
3.import java.util.Random; 
4. 
5./**
6. * @Description 测试
7. * @author FuJianyong
8. * 2015-7-6下午04:56:04
9. */ 
10.public class mainTest { 
11.    private static final String[] actions = {"向左移动一步", "向左移动两步", "向左移动三步",  
12.        "向右移动一步", "向右移动两步", "向右移动三步", "飞走了"}; 
13.     
14.    public static void main(String[] args) { 
15.        Eagle eagle = new Eagle("老鹰"); 
16.        Hen hen = new Hen("母鸡"); 
17.        Chick chick = new Chick("小鸡"); 
18.        Random random = new Random(); 
19.        int ran; 
20.        for(int i=0;i<10;i++){ 
21.            ran = random.nextInt(actions.length); 
22.            Eagle.action = actions[ran]; 
23.            eagle.move(); 
24.            hen.move(); 
25.            chick.move(); 
26.        } 
27. 
28.    } 
29. 
30.} 


运行结果:

老鹰向左移动三步
母鸡向左移动三步
小鸡向左移动三步
老鹰向左移动一步
母鸡向左移动一步
小鸡向左移动一步
老鹰飞走了
母鸡呱呱叫
小鸡唧唧叫
老鹰向右移动三步
母鸡向右移动三步
小鸡向右移动三步
老鹰飞走了
母鸡呱呱叫
小鸡唧唧叫
老鹰飞走了
母鸡呱呱叫
小鸡唧唧叫
老鹰向左移动两步
母鸡向左移动两步
小鸡向左移动两步
老鹰向左移动三步
母鸡向左移动三步
小鸡向左移动三步
老鹰飞走了
母鸡呱呱叫
小鸡唧唧叫
老鹰向右移动一步
母鸡向右移动一步
小鸡向右移动一步
分享到:
评论

相关推荐

    计算机毕业设计-校园教务处管理系统.zip

    计算机毕业设计中的校园教务处管理系统是一个旨在提高校园教务管理效率和质量的综合性信息平台。该系统采用SSM(Spring、SpringMVC、MyBatis)技术栈进行构建,利用Spring框架进行业务逻辑处理和依赖注入,通过SpringMVC实现模型-视图-控制器的设计模式,以及使用MyBatis作为ORM工具进行数据库持久化操作。系统功能涵盖了学生信息管理、课程安排、成绩录入与查询、教室资源分配、考试管理、教师工作量统计等关键模块,通过提供一个用户友好的界面和强大的后台管理功能,校园教务处管理系统不仅优化了教务工作流程,还提升了学生和教师的互动体验,是计算机专业学生展示其系统分析、设计和开发能力的理想项目。

    一些关于创新创意类的电赛竞赛文档.zip

    一些关于创新创意类的电赛竞赛文档

    项目计划管理任务app应用界面xd源文件(1)AdobeXD源码下载设计素材UI设计.xd

    项目计划管理任务app应用界面xd源文件(1)AdobeXD源码下载设计素材UI设计

    电子商务公共服务平台大数据中心HTML模板源码 大数据大屏展示源码 VUE.zip

    电子商务公共服务平台大数据中心HTML模板源码 大数据大屏展示源码 VUE

    suno AI专业教程:深入探索与实践

    本资源是一份专为AI技术追求者量身定制的深度学习与suno AI实战教程,以精炼的内容和实战案例为核心,旨在帮助专业人士和学习者快速掌握suno AI的关键技术和应用。它适用于希望深化AI知识的研究学者、工程师、数据科学家以及充满热情的学生和独立研究者。通过本教程,学习者将能够作为教学辅助材料系统学习AI理论与实践,或在职业发展中通过持续学习提升专业技能。此外,本资源通过案例分析激发创新思维,指导学习者将suno AI技术应用于解决现实问题,同时提供额外的学习材料和工具,如在线模拟和代码示例,以支持深入学习和实践探索。内容丰富而不冗长,每个知识点都配有实例分析,确保学习者能够快速吸收和应用,定期更新以紧跟技术发展,是提升AI技术能力的理想选择。

    中科创达部门技术大赛.zip

    中科创达部门技术大赛

    报文响应+获取会话公钥(SessionKey)+RAS加密+AES加密+MD5加密

    1、接入申请:在接入单位应先向税务局申请,经过审批备案后,将生成的唯一的接入方编号(appCode)和通过使用OpenSSL生成的一对私钥和公钥。其中,私钥由税务局保留,接入方编号(appCode)和公钥分配给申请接入单位,接入单位应妥善保管公钥。 2、会话公钥申请 接入申请通过后,将分配得到的接入方编号(appCode)按“请求参数结构”中的规范调用“申请会话公钥”接口,调用接口成功后得到的会话公钥(publicKey),可调用其他业务接口使用。接入方单位应妥善管理会话公钥,注意保密。 3、接口调用 调用非会话公钥申请接口时,取得的会话公钥可对请求报文进行AES加密,加签;也可对返回报文进行解密,验签。 4、调用申请会话公钥接口时,用分配的公钥对requestData明文进行RSA加密,sigin为空即可。调用非申请会话公钥接口时,用会话公钥对requestData明文进行AES加密;再对(requestData密文+会话公钥明文)进行MD5加密作为sign值。

    Navigations Widgets for Web UI Kit 源码下载设计素材UI设计.xd

    25 Navigations Widgets for Web UI Kit Ver-01AdobeXD源码下载设计素材UI设计

    W801学习笔记十二:掌机进阶V3版本之驱动(PSRAM/SD卡)

    w801掌机完整代码。

    学‘四史’、正青春、颂祖国”华中师范大学 第十届大学生新媒体创意大赛.zip

    学‘四史’、正青春、颂祖国”华中师范大学 第十届大学生新媒体创意大赛

    高分课程设计 QT5.7+Sqllite数据库小系统源码+部署文档+全部数据资料

    【资源说明】 高分课程设计 QT5.7+Sqllite数据库小系统源码+部署文档+全部数据资料 可实现数据库的可视化操作:增、删、改、查.zip 【备注】 1、该项目是高分毕业设计项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过mac/window10/11/linux测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    试用Dev Containers的示例项目-Go

    计算机技术是指评价计算机系统的各种知识和技能的总称。它涵盖了计算机硬件、软件、网络和信息安全等方面。计算机技术的发展使我们能够进行高效的数据处理、信息存储和传输。现代计算机技术包括操作系统、数据库管理、编程语言、算法设计等。同时,人工智能、云计算和大数据等新兴技术也在不断推动计算机技术的进步。计算机技术的应用广泛,涵盖了各个领域,如商业、医疗、教育和娱乐等。随着计算机技术的不断革新,我们可以更加高效地实现预期自动化、标准化

    设计模式_结构型_装饰者模式.md

    设计模式_结构型_装饰者模式

    高分毕业设计 基于Python爬虫+Flask的现岗位推荐分析可视化系统源码+部署文档+全部数据资料

    【资源说明】 高分毕业设计 基于Python爬虫+Flask的现岗位推荐分析可视化系统源码+部署文档+全部数据资料 实现工作岗位的实时发现,推荐检索,快速更新以及工作类型的区域分布效果,关键词占比分析等 【备注】 1、该项目是高分毕业设计项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过mac/window10/11/linux测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    25考研大礼包,包括数学备考资料,英语备考资料,英语阅读资料,政治备考资料

    25考研大礼包,包括数学备考资料,英语备考资料,英语阅读资料,政治备考资料

    听下plus-v2.0.2.apk

    听下plus-v2.0.2.apk

    生物信息学课程学习笔记第四版2022版

    生物信息学课程学习笔记第四版2022版

    这是一个使用pytorch完成DCGAN生成动漫人物图像的机器学习代码.zip

    这是一个使用pytorch完成DCGAN生成动漫人物图像的机器学习代码

    0016数字计数器动画AdobeXD源码下载设计素材UI设计.xd

    0016数字计数器动画AdobeXD源码下载设计素材UI设计

    一个用谷歌机器学习算法识别人体姿势并用来控制GTA:SA鹞式战斗机飞行的代码.zip

    一个用谷歌机器学习算法识别人体姿势并用来控制GTA:SA鹞式战斗机飞行的代码

Global site tag (gtag.js) - Google Analytics