假定场景:有一设备不断打印数字,若打印数字小于2或者大于8则产生告警。
1.首先定义一个告警接口,此接口实际为一观察者。
package com.boco.design;
public interface Alarmer {
public void alarm();
}
2.分别实现这个告警接口,一个告警实现为小于2的告警,另一个为大于8的告警。
package com.boco.desigen;
public class BigAlarmer implements Alarmer{
@Override
public void alarm() {
System.out.println("alarm: bigger...");
}
}
package com.boco.design;
public class SmallAlarmer implements Alarmer {
@Override
public void alarm() {
System.out.println("alarm: smaller...");
}
}
3.实现这个设备,这个设备其实就是一个被观察者。通常这个被观察者也可以定义为一个接口。
package com.boco.design;
import java.util.Random;
public class Device {
private Alarmer bigAlarmer;
private Alarmer smallAlarmer;
private int i;
public Device() {
super();
bigAlarmer = new BigAlarmer();
smallAlarmer = new SmallAlarmer();
}
public void tell(Alarmer alarmer) {
alarmer.alarm();
}
public void run(Random random) {
while (true) {
i = random.nextInt(9);
System.out.println("现在的值是" + i);
if (i < 2) {
tell(smallAlarmer);
}
if (i > 7) {
tell(bigAlarmer);
}
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//测试方法
public static void main(String[] args) {
Device d = new Device();
d.run(new Random());
}
}