观察者设计模式:观察者设计模式解决问题时,当一个对象发生指定的动作时,要通知另外一个对象做出相应的处理。
观察者设计模式的步骤:
1.当目前对象发生指定动作时,要通知另外一个对象做出相应的处理,这时候应该把对方的相应处理方法定义在接口上。
2.在当前对象维护接口的引用,当当前对象发生指定的动作时,即可调用接口中的方法了。
需求:编写一个气象站、一个工人 两个类,当气象站更新天气的时候,要通知人做出相应的处理。
package com.cn.observerModel;
import java.util.ArrayList;
import java.util.Random;
/**
* Author:Liu Zhiyong(QQ:1012421396)
* Version:Version_1
* Date:2016年8月26日11:12:57
* Desc:
观察者设计模式:观察者设计模式解决问题时,当一个对象发生指定的动作时,要通知另外一个对象做出相应的处理。
需求:编写一个气象站、一个工人 两个类,当气象站更新天气的时候,要通知人做出相应的处理。
观察者设计模式的步骤:
1.当目前对象发生指定动作时,要通知另外一个对象做出相应的处理,这时候应该把对方的相应处理方法定义在接口上。
2.在当前对象维护接口的引用,当当前对象发生指定的动作时,即可调用接口中的方法了。
*/
public class WeatherStation {
String[] weathers = {"晴天", "刮风", "雾霾", "冰雹", "下雪"};
//当前的天气
String weather;
//该集合中存储的都是需要接收天气预报的人
ArrayList<Weather> list = new ArrayList<Weather>();
//添加收听对象
public void addListener(Weather w){
list.add(w);
}
//更新天气的方法
public void updateWeather(){
Random random = new Random();
int index = random.nextInt(weathers.length);
weather = weathers[index];
System.out.println("当前的天气是:" + weather);
}
//开始工作
public void startWork(){
final Random random = new Random();
new Thread(){//匿名内部类
public void run() {
while(true){//每1~1.5秒更新一次天气
updateWeather();
//推送天气到每一位需要接收的对象
for(Weather w : list){
w.notifyWeater(weather);
}
int time = 1000 + random.nextInt(501);
try {
Thread.sleep(time);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
}.start();
}
}
package com.cn.observerModel;
import java.util.Random;
public class WeatherMain {
public static void main(String[] args) throws InterruptedException {
WeatherStation weatherStation = new WeatherStation();
Employee e1 = new Employee("木丁西");
Employee e2 = new Employee("高圆圆");
Student s1 = new Student("佟亚丽");
Student s2 = new Student("刘先生");
weatherStation.addListener(e1);
weatherStation.addListener(e2);
weatherStation.addListener(s1);
weatherStation.addListener(s2);
weatherStation.startWork();
}
}
package com.cn.observerModel;
/**
* 订阅天气预报的接口
* @author zhiyong
*
*/
public interface Weather {
public void notifyWeater(String weather);
}
package com.cn.observerModel;
/**
* 工人类
* @author zhiyong
*
*/
public class Employee implements Weather{
String name;
public Employee(String name) {
this.name = name;
}
//人根据天气做出相应的处理
public void notifyWeater(String weather){
if("晴天".equals(weather)){
System.out.println(name + "高高兴兴去上班。。。。");
}else if("雾霾".equals(weather)){
System.out.println(name + "戴着口罩去上班。。。。");
}else if("刮风".equals(weather)){
System.out.println(name + "拖着大石头去上班。。。。");
}else if("冰雹".equals(weather)){
System.out.println(name + "戴着头盔去上班。。。。");
}else if("下雪".equals(weather)){
System.out.println(name + "披着被子去上班。。。。");
}
}
package com.cn.observerModel;标签:name,观察者,System,weather,println,设计模式,public,out From: https://blog.51cto.com/u_15769923/5974294
public class Student implements Weather{
String name;
public Student(String name) {
this.name = name;
}
//人根据天气做出相应的处理
public void notifyWeater(String weather){
if("晴天".equals(weather)){
System.out.println(name + "快快乐乐去上学。。。。");
}else if("雾霾".equals(weather)){
System.out.println(name + "捂着嘴去上学。。。。");
}else if("刮风".equals(weather)){
System.out.println(name + "顶着大风去上学。。。。");
}else if("冰雹".equals(weather)){
System.out.println(name + "在家睡大觉。。。。");
}else if("下雪".equals(weather)){
System.out.println(name + "溜着冰去上学。。。。");
}