设计模式之观察者模式
来源:互联网 发布:淘宝快捷支付怎么取消 编辑:程序博客网 时间:2024/06/09 16:19
public interface IObserver {
public void update(IObserverable observerable);
}
public class PersonObserver implements IObserver {
@Override
public void update(IObserverable observerable) {
System.out.println("个人收到预警 "+observerable.reportTemperature());
}
}
public class CompanyObserver implements IObserver {
@Override
public void update(IObserverable observerable) {
System.out.println("公司收到预警 "+observerable.reportTemperature());
}
}
public class GovermentObserver implements IObserver {
@Override
public void update(IObserverable observerable) {
System.out.println("政府收到预警 "+observerable.reportTemperature());
}
}
/**
* 被观察者* @author 熊诗言
*
*/
public interface IObserverable {
public boolean add(IObserver observer);
public boolean remove(IObserver observer);
public void notifyAllObserver();
public void setTemperature(float temperature);
public String reportTemperature();
}
public class Subject implements IObserverable {
private float temperature;
private String waringLevel;
private List<IObserver> list = new ArrayList<IObserver>();
@Override
public boolean add(IObserver observer) {
if(observer!=null && !list.contains(observer)){
return list.add(observer);
}
return false;
}
@Override
public void notifyAllObserver() {
System.out.println("气象部门发布 " + waringLevel + "警报");
Iterator<IObserver> itr = list.iterator();
while (itr.hasNext()) {
itr.next().update(this);
}
}
@Override
public boolean remove(IObserver observer) {
return this.list.remove(observer);
}
@Override
public String reportTemperature() {
return "温度:"+this.temperature;
}
@Override
public void setTemperature(float temperature) {
this.temperature = temperature;
this.invoke();
}
private void invoke() {
if(this.temperature>=35){
if(this.temperature>=35 && this.temperature<37 ){
this.waringLevel = "黄色";
}else if(this.temperature>=37 && this.temperature<40 ){
this.waringLevel = "橙色";
}else {
this.waringLevel = "红色";
}
this.notifyAllObserver();
}
}
}
测试
public class Client {
public static void main(String[] args) {
IObserverable observerable = new Subject();
observerable.add(new PersonObserver());
observerable.add(new GovermentObserver());
observerable.add(new CompanyObserver());
int i = 0;
Random random = new Random();
while(++i<10){
observerable.setTemperature(random.nextInt(45));
}
}
}
- 设计模式之-观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- Android获取控件坐标,触摸点坐标 getX getRawX
- 起一个英文名字
- html判断id是否存在
- 工具整理
- 在C#中使用SerialPort类实现串口通信
- 设计模式之观察者模式
- 图像分割
- java中的进程与线程
- thinkphp 标签
- 设置release 模式可打断点调试
- 设置TextView 一行文本显示不同的效果
- pgr_fromAtoB
- 九度oj-1391-顺时针打印矩阵
- HTML5 Canvas八大核心技术及其API用法