设计模式之观察者模式

蔚落 2022-05-09 14:08 320阅读 0赞

前言

使用场景:

1、拍卖的时候,拍卖师观察最高标价,然后通知给其他竞价者竞价。
2、西游记里面悟空请求菩萨降服红孩儿,菩萨洒了一地水招来一个老乌龟,这个乌龟就是观察者,他观察菩萨洒水这个动作。

1、Subject 对象带有绑定观察者到 Client 对象和从 Client 对象解绑观察者的方法

  1. package com.hlj.designpatterns.ObserverPattern.inter;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import com.hlj.designpatterns.ObserverPattern.abstractClass.Observer;
  5. /** * @author : HealerJean * @date : 2017年12月15日 下午2:28:08 * @Description: Subject 对象带有绑定观察者到 Client 对象和从 Client 对象解绑观察者的方法 */
  6. public class Subject {
  7. private List<Observer> observers = new ArrayList<Observer>();
  8. private int state;
  9. public int getState() {
  10. return state;
  11. }
  12. public void setState(int state) {
  13. this.state = state;
  14. notifyAllObservers();
  15. }
  16. /** * 绑定观察者到 Client 对象 * @param observer */
  17. public void attach(Observer observer){
  18. observers.add(observer);
  19. }
  20. /** * 从 Client 对象解绑观察者的方法 */
  21. public void notifyAllObservers(){
  22. for (Observer observer : observers) {
  23. observer.update();
  24. }
  25. }
  26. }

3、观察者抽象类Observer(用于设置观察到之后的方法)

  1. public abstract class Observer {
  2. protected Subject subject;
  3. public abstract void update();
  4. }

4、观察者实现类

4.1、BinaryObserver

  1. public class BinaryObserver extends Observer{
  2. public BinaryObserver(Subject subject){
  3. this.subject = subject;
  4. this.subject.attach(this);
  5. }
  6. @Override
  7. public void update() {
  8. System.out.println( "Binary String: "
  9. + Integer.toBinaryString( subject.getState() ) );
  10. }
  11. }

4.2、HexaObserver

  1. public class HexaObserver extends Observer{
  2. public HexaObserver(Subject subject){
  3. this.subject = subject;
  4. this.subject.attach(this);
  5. }
  6. @Override
  7. public void update() {
  8. System.out.println( "Hex String: "
  9. + Integer.toHexString( subject.getState() ).toUpperCase() );
  10. }
  11. }

4.3、OctalObserver

  1. public class OctalObserver extends Observer{
  2. public OctalObserver(Subject subject){
  3. this.subject = subject;
  4. this.subject.attach(this);
  5. }
  6. @Override
  7. public void update() {
  8. System.out.println( "Octal String: "
  9. + Integer.toOctalString( subject.getState() ) );
  10. }
  11. }

5、开始测试

  1. public class main {
  2. public static void main(String[] args) {
  3. Subject subject = new Subject();
  4. new HexaObserver(subject);
  5. new OctalObserver(subject);
  6. new BinaryObserver(subject);
  7. System.out.println("First state change: 15");
  8. subject.setState(15);
  9. System.out.println("Second state change: 10");
  10. subject.setState(10);
  11. }
  12. }
  13. First state change: 15
  14. Hex String: F
  15. Octal String: 17
  16. Binary String: 1111
  17. Second state change: 10
  18. Hex String: A
  19. Octal String: 12
  20. Binary String: 1010

ContactAuthor

发表评论

表情:
评论列表 (有 0 条评论,320人围观)

还没有评论,来说两句吧...

相关阅读

    相关 设计模式观察模式

    观察者模式 什么是观察者模式 观察者模式属于行为模式的一种,定义了对象的通用交流方式。 观察者模式定义了一对多的关系,一个对象改变了状态,则其它所有依赖

    相关 设计模式观察模式

    前言 使用场景: 1、拍卖的时候,拍卖师观察最高标价,然后通知给其他竞价者竞价。 2、西游记里面悟空请求菩萨降服红孩儿,菩萨洒了一地水招来一个老乌龟,这个乌龟

    相关 设计模式观察模式

    当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。 即目标发生更

    相关 设计模式观察模式

    定义 当一个对象的状态发生变化时,能够自动通知其他关联对象,自动刷新对象状态。观察者模式提供给关联对象一种同步通信的手段,使某个对象与依赖它的其他对象之间保持状态同步

    相关 设计模式观察模式

     今天放假,又有时间继续啃《java设计模式》这本书了。每次学会一种设计模式内心都会有一种小小的成就感,但是懂是懂了,不知道会不会用。主要是现在没有什么项目经验,设计模式学了也

    相关 设计模式观察模式

    [上一篇:设计模式之策略模式][Link 1] 故事要从气象站说起,气象站有个WeatherData对象,这个对象负责拿到所有的气象数据(温度、湿度、气压),而气象站同时也

    相关 设计模式观察模式

    1 观察者模式 当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都

    相关 设计模式——观察模式

    > 设计模式: > > 前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定。而是一套用来提高代码可复用性、可维护性、可读性、稳健性、以及安全性的解决方案