1、观察者接口类

package com.zawl.designpattern.observer;/*** @Description 观察者接口* @Author Andy <luomuqintian@163.com>* @Version V1.0.0* @Since 1.0* @Date 2019/12/1 12:05*/
public interface Observer {void update();
}

2、被观察者接口类

package com.zawl.designpattern.observer;import java.util.ArrayList;/*** @Description 被观察者接口类* @Author Andy <luomuqintian@163.com>* @Version V1.0.0* @Since 1.0* @Date 2019/12/1 12:06*/
public abstract class Subject {//观察目标名称private String name;//观察目标状态private String state;public String getState() {return state;}public void setState(String state) {this.state = state;}public String getName() {return name;}public void setName(String name) {this.name = name;}//定义一个观察者集合用于存储所有观察者对象protected ArrayList<Observer> observers = new ArrayList<>();//注册方法,用于向观察者集合中增加一个观察者public void attach(Observer observer) {observers.add(observer);}//注销方法,用于在观察者集合中删除一个观察者public void detach(Observer observer) {observers.remove(observer);}//声明抽象通知方法public abstract void notifyObserver();
}

3、被观察者具体实现类

package com.zawl.designpattern.observer;/*** @Description 被观察者具体实现类* @Author Andy <luomuqintian@163.com>* @Version V1.0.0* @Since 1.0* @Date 2019/12/1 12:10*/
public class Enemy extends  Subject{@Overridepublic void notifyObserver() {for(Observer observer:observers){observer.update();}}
}

4、观察者具体实现类

package com.zawl.designpattern.observer;/*** @Description 观察者具体实现类* @Author Andy <luomuqintian@163.com>* @Version V1.0.0* @Since 1.0* @Date 2019/12/1 12:08*/
public class Hero implements Observer{private String name;private String uniqueSkill;public Hero(String name, String uniqueSkill) {this.name = name;this.uniqueSkill = uniqueSkill;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getUniqueSkill() {return uniqueSkill;}public void setUniqueSkill(String uniqueSkill) {this.uniqueSkill = uniqueSkill;}@Overridepublic void update() {System.out.println(this.name+"发现了敌军");this.lastBlow();}/*** 英雄发出最后一击*/public void lastBlow(){System.out.println(this.name+"发起了"+uniqueSkill);}
}

5、客户端

package com.zawl.designpattern.observer;import java.util.ArrayList;/*** @Description* @Author Andy <luomuqintian@163.com>* @Version V1.0.0* @Since 1.0* @Date 2019/12/1 12:38*/
public class Client {public static void main(String[] args) {Observer sf = new Hero("影魔","魂之挽歌");Observer zeus = new Hero("宙斯","雷神之怒");Observer th = new Hero("潮汐猎人","毁灭");ArrayList<Observer> observers = new ArrayList<Observer>();observers.add(sf);observers.add(zeus);observers.add(th);Subject sub = new Enemy();sub.setName("卡尔");System.out.println("@"+sub.getName()+"遭受攻击");sub.setState("残血");System.out.println("@"+sub.getName()+"变成了"+sub.getState());System.out.println("@天灾军团发现敌军--"+sub.getState()+sub.getName());sub.observers = observers;sub.notifyObserver();sub.setState("被击杀");System.out.println("@"+sub.getName()+sub.getState());}
}

6、执行结果

设计模式学习-观察者模式相关推荐

  1. 设计模式学习--观察者模式(Observer Pattern)

    设计模式学习--观察者模式(Oberser Pattern) 2013年5月18日 天气:热!  下午15:28  设计模式学习中 学习者:小巫 什么是观察者模式? 定义了对象之间的一对多依赖,这样一 ...

  2. 学习《图说设计模式》观察者模式

    图说设计模式之观察者模式 1. 模式动机 建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应做出反应.在此,发生改变的对象称为观察目标,而被通知的对象称为观察者,一 ...

  3. 7 种 Javascript 常用设计模式学习笔记

    7 种 Javascript 常用设计模式学习笔记 由于 JS 或者前端的场景限制,并不是 23 种设计模式都常用. 有的是没有使用场景,有的模式使用场景非常少,所以只是列举 7 个常见的模式 本文的 ...

  4. 设计模式学习笔记清单

    设计模式学习笔记清单 关于设计模式许多人已经耳熟能详,这段时间结合李建忠的教学视频以及大量网络资料,把这部分过了一遍,整理出学习笔记,而真正的深入学习和理解只能在具体的开发环境中日积月累.      ...

  5. 步步为营 .NET 设计模式学习笔记系列总结

    设计模式我从开篇到23种设计模式的讲解总共花了进两个月的时间,其间有很多读者给我提出了很好的建议,同时也指出了我的不足,对此我表示感谢,正是由于很多读者的支持我才能坚持的写到最后.在此表示我真诚的谢意 ...

  6. 设计模式学习笔记——观察者(Observer)模式

    设计模式学习笔记--观察者(Observer)模式 @(设计模式)[设计模式, 观察者模式, Observer] 设计模式学习笔记观察者Observer模式 基本介绍 观察者案例 类图 实现代码 Ob ...

  7. 设计模式 C++观察者模式

    无论是在现实世界中还是在软件系统中,人们常常会遇到这样一类问题,一个对象的状态改变会引发其他对象的状态改变,如十字路口的交通信号灯,红灯亮则汽车停,绿灯亮则汽车行,再如点击软件中一个按钮,则会弹出一个 ...

  8. 设计模式学习笔记(目录篇)

    设计模式学习笔记(目录篇) 为了方便查看,特此将设计模式学习笔记系列单独做一个目录. 1   设计模式学习笔记(一:命令模式) 2   设计模式学习笔记(二:观察者模式) 3   设计模式学习笔记(三 ...

  9. 设计模式——23种设计模式学习总结

    声明:本文为个人笔记,用于学习研究使用非商用,内容为个人研究及综合整理所得,若有违规,请联系,违规必改. 系列文章目录 简单工厂模式 策略模式模式 装饰模式(进行中) 代理模式(进行中) 工厂方法模式 ...

最新文章

  1. 抓小偷编程题目c语言,如何使用面相对象编程和c++实现:警察抓小偷的任务
  2. 利用卷积神经网络对脑电图解码及可视化
  3. Two Arrays And Swaps CodeForces - 1353B(贪心+分类)
  4. 使用iozone和bonnie测试磁盘IO
  5. Oracle命令--为数据文件缩容
  6. 【OpenGL】游戏编程常用TGA图像格式详解以及加载纹理编程实现
  7. 【Project3】【web.xml分析】
  8. 天猫国际宣布今年要孵化1000家“数字化首店”
  9. Linux下Nodejs安装
  10. Qt之QFileIconProvider
  11. Web 开发与设计师速查手册大全
  12. 3.26 Tensorflow 实验记录
  13. react-tv-focusable
  14. 登录界面实现记住密码功能
  15. 计算机毕业设计 SSM网上订票系统 飞机订票购票系统 在线订票系统 机票订票系统
  16. Volatility使用与实战
  17. 与其骑会三处。汉军不知羽所居
  18. linux系统下查看 显卡 信息
  19. 阿里云小蜜优势与应用场景
  20. java工作流 snaker_GitHub - sneakerhead/hutool: A java tools make it easy to code

热门文章

  1. 如何重设/删除SOLIDWORKS注册表?
  2. 2020年8月考试总结
  3. easyUI dataGrid 隐藏分页工具栏 隐藏表头
  4. jvm崩溃并输出 hs_err_pidxxxx.log文件异常原因
  5. 公益宣传片制作的难点
  6. lenovo Y450 --- Ubuntu 13.04 安装 博通无线网卡驱动(系统离线上不了网的情况)
  7. Github Pages 使用国内 CDN 加速
  8. 基于FFmpeg和Qt的播放器 QtAV库
  9. java socket 重连_java socket 重连问题
  10. JointJS:JavaScript 流程图绘制框架