实验内容
实验运行截图
实验代码
package Observer.homework;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TestUse {
public static void main(String args[]){
//创建主题
WeatherService service = WeatherService.instance;
//添加观察者
service.addClient(new ClientWeatherServer());
service.addClient(new ClientTravelServer());
// 实例化人类王先生
Person wang = new Person("wang");
service.addClient(wang);
//更新主题
Date nowTime = new Date(System.currentTimeMillis());
SimpleDateFormat sdFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:dd");
String retStrFormatNowDate = sdFormatter.format(nowTime);
// System.out.println("retStrFormatNowDate:"+retStrFormatNowDate);
service.updateWeather(new WeatherInfo(retStrFormatNowDate, "晴转大雨","预报日期:明天,天气状况:晴转大雨,台风影响福建﹐最高温度:32。最低温度:20.旅游项目:黄山5日游﹐旅游价格信息:价格: 5000/人."));
service.updateWeather(new WeatherInfo(retStrFormatNowDate, "暴雨","预报日期:后天,天气状况:台风登陆福建,暴雨﹐最高温度:26,最低温度:19.旅游项目:香港3日游﹐旅游价格信息:价格:9O00/人."));
}
}
package Observer.homework;
//主题
public interface IWeatherService {
void addClient(Client client); //添加观察者
boolean deleteClient(Client client);//删除观察者
void notifyClients(); //通知
void updateWeather(WeatherInfo info);//主题内容更新
}
package Observer.homework;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.LinkedList;
//主题,同时使用了枚举实现单例
public enum WeatherService implements IWeatherService{
instance;
private LinkedList<WeatherInfo> weatherInfos = new LinkedList<WeatherInfo>();
private LinkedHashSet<Client> clients = new LinkedHashSet<Client>(); //存放观察者
//添加观察者
@Override
public void addClient(Client client) {
clients.add(client);
}
//删除观察者
@Override
public boolean deleteClient(Client client) {
return clients.remove(client);
}
//通知观察者
@Override
public void notifyClients() {
Iterator<Client> iterator = clients.iterator();
while(iterator.hasNext()){
iterator.next().getWeather(weatherInfos.peekFirst());
}
}
//更新天气
@Override
public void updateWeather(WeatherInfo info) {
if(weatherInfos.size()>0)
if(weatherInfos.peekFirst().equals(info)) return;
weatherInfos.push(info);
if(clients.size()==0) return;
notifyClients();
}
}
package Observer.homework;
//观察者
public interface Client {
void getWeather(WeatherInfo info);
}
package Observer.homework;
public class ClientTravelServer implements Client {
private static String name = "旅行社的服务";
private WeatherInfo info;
@Override
public void getWeather(WeatherInfo info) {
this.info = info;
dealMsg();
}
private void dealMsg(){
System.out.println(name + "收到最新天气:time="+info.getTime()+"msg="+info.getWeather()+"。马上开始推送消息...");
}
}
package Observer.homework;
public class ClientWeatherServer implements Client {
private static String name = "气象站的服务";
private WeatherInfo info;
@Override
public void getWeather(WeatherInfo info) {
this.info = info;
dealMsg();
}
private void dealMsg(){
System.out.println(name + "收到最新天气:time="+info.getTime()+"msg="+info.getWeather()+"info="+info.getInfo()+",马上开始推送消息...");
}
}
package Observer.homework;
// 人类
public class Person implements Client {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Person(String name) {
this.name = name;
}
@Override
public void getWeather(WeatherInfo info) {
// TODO Auto-generated method stub
}
}
package Observer.homework;
//天气的消息实体
public class WeatherInfo {
private String time;
private String weather;
private String info;
public WeatherInfo(String time,String weather, String info){
this.time = time;
this.weather = weather;
this.info = info;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getWeather() {
return weather;
}
public void setWeather(String weather) {
this.weather = weather;
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
@Override
public boolean equals(Object obj) {
WeatherInfo info = (WeatherInfo) obj;
return info.time==this.time&&info.weather.equals(this.weather);
}
}
下载
https://download.csdn.net/download/m0_61504367/85232118