侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

java观察者模式

Java  /  管理员 发布于 3年前   330

观察者模式——顾名思义,就是一个对象观察另一个对象,当被观察的对象发生变化时,观察者也会跟着变化。

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

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

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

package 观察者模式;/** * 老鹰(被观察者) *  * @Description * @author FuJianyong * 2015-7-6下午04:56:29 */public class Eagle {    /**     * 动作      */    public static String action;    private String name;        public Eagle(String name){    this.name = name;    }        public void move(){    System.out.println(this.name + action);    }    }


package 观察者模式;/** * 母鸡(观察者) * @Description * @author FuJianyong * 2015-7-6下午04:57:50 */public class Hen {private String name;public Hen(String name){this.name = name;}public void move() {if(Eagle.action.equals("飞走了")){System.out.println(this.name + "呱呱叫");}else{    System.out.println(this.name + Eagle.action);}}  }



package 观察者模式;/** * 小鸡 * @Description * @author FuJianyong * 2015-7-6下午05:00:25 */public class Chick{private String name;public Chick(String name) {this.name = name;}public void move(){if(Eagle.action.equals("飞走了")){System.out.println(this.name + "唧唧叫");}else{    System.out.println(this.name + Eagle.action);}}}



测试代码:

package 观察者模式;import java.util.Random;/** * @Description 测试 * @author FuJianyong * 2015-7-6下午04:56:04 */public class mainTest {    private static final String[] actions = {"向左移动一步", "向左移动两步", "向左移动三步",     "向右移动一步", "向右移动两步", "向右移动三步", "飞走了"};        public static void main(String[] args) {    Eagle eagle = new Eagle("老鹰");    Hen hen = new Hen("母鸡");    Chick chick = new Chick("小鸡");    Random random = new Random();    int ran;    for(int i=0;i<10;i++){    ran = random.nextInt(actions.length);    Eagle.action = actions[ran];eagle.move();hen.move();chick.move();    }}}



运行结果:

老鹰向左移动三步
母鸡向左移动三步
小鸡向左移动三步
老鹰向左移动一步
母鸡向左移动一步
小鸡向左移动一步
老鹰飞走了
母鸡呱呱叫
小鸡唧唧叫
老鹰向右移动三步
母鸡向右移动三步
小鸡向右移动三步
老鹰飞走了
母鸡呱呱叫
小鸡唧唧叫
老鹰飞走了
母鸡呱呱叫
小鸡唧唧叫
老鹰向左移动两步
母鸡向左移动两步
小鸡向左移动两步
老鹰向左移动三步
母鸡向左移动三步
小鸡向左移动三步
老鹰飞走了
母鸡呱呱叫
小鸡唧唧叫
老鹰向右移动一步
母鸡向右移动一步
小鸡向右移动一步



  • 上一条:
    java责任链模式
    下一条:
    java解析APK
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • java 正则表达式基础,实例学习资料收集大全 原创(0个评论)
    • java正则表达式彻底研究(0个评论)
    • java正则表达式验证函数(0个评论)
    • MVC、MVP和MVVM分别是什么(0个评论)
    • java 单例模式(饿汉模式与懒汉模式)(0个评论)
    • 近期文章
    • 在laravel框架中的5个HTTP客户端技巧分享(0个评论)
    • 在go语言中使用FFmpeg库实现PCM音频文件编码为mp3格式文件流程步骤(0个评论)
    • gopacket免安装Pcap实现驱动层流量抓包流程步骤(0个评论)
    • 在laravel项目中实现密码强度验证功能推荐扩展包:password-strength(0个评论)
    • 在go语言中用filepath.Match()函数以通配符模式匹配字符串示例(0个评论)
    • Laravel Response Classes 响应类使用优化浅析(0个评论)
    • mysql中sql_mode的各模式浅析(0个评论)
    • 百度文心一言今天发布,个人第一批内测体验记录,不好别打我(0个评论)
    • 嘿加密世界让我们谈谈在共识中将中本聪主流化(0个评论)
    • 在go语言中寻找两个切片或数组中的相同元素/共同点/交集并集示例代码(0个评论)
    • 近期评论
    • 博主 在

      2023年国务院办公厅春节放假通知:1月21日起休7天中评论 @ xiaoB 你只管努力,剩下的叫给天意;天若有情天亦老,..
    • xiaoB 在

      2023年国务院办公厅春节放假通知:1月21日起休7天中评论 会不会春节放假后又阳一次?..
    • BUG4 在

      你翻墙过吗?国内使用vpn翻墙可能会被网警抓,你需了解的事中评论 不是吧?..
    • 博主 在

      go语言+beego框架中获取get,post请求的所有参数中评论 @ t1  直接在router.go文件中配就ok..
    • Jade 在

      如何在MySQL查询中获得当月记录中评论 Dear zongscan.com team, We can skyroc..
    • 2016-11
    • 2018-03
    • 2020-03
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客