java设计模式--观察者模式
来源:互联网 发布:java random生成随机数 编辑:程序博客网 时间:2024/05/29 19:25
介绍:多个对象想知道一个对象中数据变化情况的一种模式
主题:定义一个接口,包含具体主题需要实现的一些方法,可以添加具体观察者
具体主题:实现主题接口,有通知具体观察者数据更新的方法
观察者:定义一个接口
具体观察者:实现观察者接口,有主题接口的一个引用,便于主题删除或者添加观察者
主题 : Subject.java
public interface Subject{
public void addObserver(Observer o);
public void deleteObserver(Observer o);
public void notifyObservers();
}
Obsever.java
public interface Observer{
public void hearTelephone(String heardMess);
}
具体主题 SeekJobCenter.java_1
import java.util.ArrayList;
public class SeekJobCenter implements Subject{
String mess;
boolean changed;
ArrayList<Observer> personList;
SeekJobCenter(){
personList=new ArrayList<Observer>();
mess="";
changed=false;
}
public void addObserver(Observer o){
if(!(personList.contains(o)))
personList.add(o); }
public void deleteObserver(Observer o){
if(personList.contains(o))
personList.remove(o);
}
具体主题 SeekJobCenter.java_2
public void notifyObservers(){
if(changed){for(int i=0;i<personList.size();i++){
Observer observer=personList.get(i);
observer.hearTelephone(mess); }
changed=false;
}
}
public void giveNewMess(String str){
if(str.equals(mess))
changed=false;
else{
mess=str;
changed=true;
}
}
}
具体观察者_1 UniversityStudent.java
import java.io.*;
public class UniverStudent implements Observer{
Subject subject;
File myFile;
UniverStudent(Subject subject,String fileName){
this.subject=subject;
subject.addObserver(this); //使当前实例成为subject所引用的具体主题的观察者
myFile=new File(fileName);
}
public void hearTelephone(String heardMess){
try{ RandomAccessFile out=new RandomAccessFile(myFile,"rw");
out.seek(out.length());
byte [] b=heardMess.getBytes();
out.write(b); //更新文件中的内容
System.out.print("我是一个大学生,");
System.out.println("我向文件"+myFile.getName()+"写入如下内容:");
System.out.println(heardMess);
}
catch(IOException exp){
System.out.println(exp.toString());
}
}
}
具体观察者_1 UniversityStudent.java
import java.io.*;
public class UniverStudent implements Observer{
Subject subject;
File myFile;
UniverStudent(Subject subject,String fileName){
this.subject=subject;
subject.addObserver(this); //使当前实例成为subject所引用的具体主题的观察者
myFile=new File(fileName);
}
public void hearTelephone(String heardMess){
try{ RandomAccessFile out=new RandomAccessFile(myFile,"rw");
out.seek(out.length());
byte [] b=heardMess.getBytes();
out.write(b); //更新文件中的内容
System.out.print("我是一个大学生,");
System.out.println("我向文件"+myFile.getName()+"写入如下内容:");
System.out.println(heardMess);
}
catch(IOException exp){
System.out.println(exp.toString());
}
}
}
应用 Application.java
public class Application{
public static void main(String args[]){
SeekJobCenter center=new SeekJobCenter();
UniverStudent zhangLin=new UniverStudent(center,"A.txt");
HaiGui wangHao=new HaiGui(center,"B.txt");
center.giveNewMess("腾辉公司需要10个java程序员。");
center.notifyObservers();
center.giveNewMess("海景公司需要8个动画设计师。");
center.notifyObservers();
center.giveNewMess("仁海公司需要9个电工。");
center.notifyObservers();
center.giveNewMess("仁海公司需要9个电工。");
center.notifyObservers();
}
- java设计模式-----观察者
- JAVA 观察者设计模式
- java观察者设计模式
- java观察者设计模式
- java 观察者设计模式
- JAVA-观察者设计模式
- JAVA设计模式--观察者
- Java---观察者设计模式
- Java设计模式:观察者
- Java设计模式-观察者
- java观察者设计模式
- java设计模式-观察者模式
- java设计模式---观察者模式
- java设计模式---观察者模式
- java设计模式---观察者模式
- java设计模式-----观察者模式
- java 设计模式---->观察者模式
- java设计模式----观察者模式
- Android Bitmap OutOfMemory
- Redis 数据结构解析和命令指南
- Java语言中 将double类型不以科学计数法输出
- 【交互设计】手机上的跳转操作
- cocos2dx3.0 Vector Map Value 内存管理总结
- java设计模式--观察者模式
- Mysql 主从状态监控
- Picture Control的使用
- 在百度云中与百度云数据库通讯遇到的问题
- .net学习记录-comboBox控件
- activity 学习笔记
- Android开源项目编译运行
- c#复制dataGridView1单元格
- 二进制类文件的内幕