Java观察者模式 : Observer / Observable

简介: /**Java观察者模式的场景:一个女孩洗澡,被很多男孩偷看。女孩洞察后,搜索坏男孩,然后继续洗澡。三个类:Boy,Girl还有主类MainClass。
/**
Java观察者模式的场景:一个女孩洗澡,被很多男孩偷看。
女孩洞察后,搜索坏男孩,然后继续洗澡。

三个类:Boy,Girl还有主类MainClass。
*/

/*
男孩
Boy.java
*/
import java.util.Observable;
import java.util.Observer;


public class Boy implements Observer{
 
 private String name="";
 
 public Boy(String name){
  this.name=name;
 }
 
 @Override
 public void update(Observable o, Object obj) {
  
  Girl girl=(Girl)o;
  
  System.out.println(name+" 看到 "+girl.getName()+" "+girl.getStatus());
 }
 
 
 public String getName()
 {
  return name;
 }
}

 

 


/*
女孩
Girl.java
*/
import java.util.Observable;


public class Girl extends Observable{
 private String name="";
 private String thing="";
 
 public Girl(String name){
  this.name=name;
 }
 
 public void doSomething(String thing){
  this.thing=thing;
  
  this.setChanged();  
  this.notifyObservers(thing); 
 }
 
 public String getStatus(){
  return thing;
 }
 
 public String getName(){
  return name;
 }
}

 

 

/*
主类,测试
*/
import java.util.ArrayList;
import java.util.Random;

public class MainClass {

 private Girl girl=null;
 private ArrayList<Boy> boys=new ArrayList<Boy>();
 
 public MainClass() {
  
  girl=new Girl("MM");
  
  Boy boyA=new Boy("小A");
  Boy boyB=new Boy("小B");
  Boy boyC=new Boy("小C");
  Boy boyD=new Boy("小D");
  boys.add(boyA);
  boys.add(boyB);
  boys.add(boyC);
  boys.add(boyD);
  
  girl.addObserver(boyA);
  girl.addObserver(boyB);
  girl.addObserver(boyC);
  girl.addObserver(boyD);
  
  girl.doSomething("脱衣服...");
  girl.doSomething("洗澡...");
  girl.doSomething("感觉有人偷看!?停止洗澡,穿上衣服,开始搜查...");

  girlSearchBadBoy();
  
  //搞定!继续洗澡
  girl.doSomething("再次脱衣服...");
  girl.doSomething("再次洗澡...");
 }
 
 private void girlSearchBadBoy()
 {
  Random rand=new Random();
  
  int unluckyNumber=rand.nextInt( girl.countObservers() );
  Boy unluckyBoy=boys.get(unluckyNumber);
    
  System.out.println(unluckyBoy.getName()+" 暴露,踢出去!");
  girl.deleteObserver(unluckyBoy); 
 }

 
 public static void main(String[] args) {
  new MainClass();
 }
}

相关文章
|
4月前
|
设计模式 消息中间件 前端开发
浅析观察者模式在Java中的应用
观察者模式(Observer Design Pattern),也叫做发布订阅模式(Publish-Subscribe Design Pattern)、模型-视图(Model-View)模式、源-监听器(Source-Listener)模式、从属者(Dependents)模式
63 3
|
1月前
|
设计模式 监控 Java
设计模式 - 观察者模式(Observer):Java中的战术与策略
【4月更文挑战第7天】观察者模式是构建可维护、可扩展系统的关键,它在Java中通过`Observable`和`Observer`实现对象间一对多的依赖关系,常用于事件处理、数据绑定和同步。该模式支持事件驱动架构、数据同步和实时系统,但需注意避免循环依赖、控制通知粒度,并关注性能和内存泄漏问题。通过明确角色、使用抽象和管理观察者注册,可最大化其效果。
|
5月前
|
设计模式 存储 Java
Java设计模式【二十】:观察者模式
Java设计模式【二十】:观察者模式
27 0
|
1月前
|
设计模式 Java
23种设计模式,观察者模式的概念优缺点以及JAVA代码举例
【4月更文挑战第9天】观察者模式是一种行为设计模式,它定义了对象之间的一对多依赖关系,使得当一个对象改变状态时,所有依赖于它的对象都会得到通知并自动更新。
24 2
|
4月前
|
设计模式 前端开发 NoSQL
聊聊Java设计模式-观察者模式
观察者模式(Observer Design Pattern),也叫做发布订阅模式(Publish-Subscribe Design Pattern)、模型-视图(Model-View)模式、源-监听器(Source-Listener)模式、从属者(Dependents)模式。指在对象之间定义一个一对多的依赖,当一个对象状态改变的时候,所有依赖的对象都会自动收到通知。
69 0
聊聊Java设计模式-观察者模式
|
5月前
|
设计模式 Java
Java设计模式:什么是观察者模式(Observer Pattern)?
Java设计模式:什么是观察者模式(Observer Pattern)?
32 0
|
7月前
|
设计模式 Java API
【设计模式——学习笔记】23种设计模式——观察者模式Observer(原理讲解+应用场景介绍+案例介绍+Java代码实现)
【设计模式——学习笔记】23种设计模式——观察者模式Observer(原理讲解+应用场景介绍+案例介绍+Java代码实现)
93 0
|
9月前
|
设计模式 Java
实时更新:解析Java设计模式中的观察者模式
在软件开发领域,设计模式是一组经过验证的最佳实践方法,用于解决各种常见问题。观察者模式是一种行为型设计模式,其目标是在对象之间建立一种依赖关系,使得一个对象的状态发生变化时,所有依赖于它的对象都会得到通知并自动更新。在本文中,我们将深入了解观察者模式的核心思想、应用场景以及它在Java中的实际运用。
67 0
|
9月前
|
设计模式 Java
java实现23种设计模式-观察者模式
java实现23种设计模式-观察者模式
31 0
|
10月前
|
设计模式 Java
Java设计模式解析:观察者模式的应用和实例
Java设计模式解析:观察者模式的应用和实例